我有一个是通过从远程服务器拉取的数据的MS SQL查询。 我正在拉低数据需要通过在运行时确定..当我运行这样的查询日期进行筛选:
SELECT * FROM SERVER.Database.dbo.RemoteView
WHERE EntryDate > '1/1/2009'
然后将过滤器远程应用......不过,我实际上并不想用“1/1/2009”的日期 - 我想通过用户定义的函数提供的日期,就像这样:
SELECT * FROM SERVER.Database.dbo.RemoteView
WHERE EntryDate > dbo.MyCustomCLRDateFunction()
其中函数是一个自定义的CLR标量值函数返回一个日期时间......( 你可能会问,为什么我需要这样做......细节都有点复杂,所以只相信我-我必须这样做,这方式。)
当我运行此查询,远程查询不能远程过滤 - 毕竟数据被拉低(400,000行VS 100,000行)过滤完成,它使一个显著差异。
有没有一种方法,我可以强制查询远程执行过滤操作?
谢谢!
你就不能发这样的查询,还是在CLR函数必须真正将select语句里面叫什么名字?
Declare @datetime datetime
Set @datetime = dbo.MyCustomCLRDateFunction()
SELECT * FROM SERVER.Database.dbo.RemoteView
WHERE EntryDate > @datetime
你也可以创建一个字符串,并使用OPENQUERY ...
set @sqlString =
' select into myTable from openquery
(remoteServer,
"SELECT * FROM Database.dbo.RemoteView WHERE EntryDate > %DTSTART"
)
'
set @sqlString =
replace(@sqlString, '%DTSTART',
(select cast(dbo.MyCustomCLRDateFunction() as char(8))
)
EXECUTE sp_executesql @stmt=@sqlString
您需要正确地装点您的CLR函数将其标记为确定性,精确和DataAccessKind.None数据接入/系统的数据访问。