Sql-Server-2005
如何使用參數呼叫遠端使用者定義函式?
我們有一個 SQL 伺服器,其中包含指向另一個伺服器上的另一個伺服器的連結。我想在 ServerA 上創建一個使用者定義的函式,它返回 ServerB 上 udf 的值,但是 SQL 告訴我
Remote function calls are not allowed within a function.
有沒有解決的辦法?
udf 確實有一個參數,所以我不能使用
OPENQUERY
. 我以為我可以通過使用它來工作sp_executesql
,但是雖然這在空白查詢視窗中有效,但它不適用於使用者定義的函式。declare @someValue bit exec ServerB.MyDatabase.dbo.sp_executesql N'SELECT @someValue = dbo.[SomeUDF](@id)', N'@id int, @someValue bit OUTPUT', @id=@id, @someValue=@someValue OUTPUT select @someValue
整個函式作為查詢的一部分被呼叫,所以我認為我不能使用儲存過程
SELECT * FROM SomeTable WHERE dbo.SomeUDF(Id) = 1
您可以使用 OPENQUERY。您只需要使用動態 SQL 來建構 OPENQUERY 呼叫
DECLARE @sql nvarchar(4000); SET @sql = 'SELECT * FROM OPENQUERY(linkedServerName, ''SELECT @someValue = dbo.[SomeUDF](' + CAST(@id etc) + ')'')'; EXEC (@sql)
但是,您不能將其建構到本地伺服器上的更大查詢中。
UDF + 連結伺服器 + 參數不能很好地結合在一起……