Sql-Server-2005

如何使用參數呼叫遠端使用者定義函式?

  • September 3, 2014

我們有一個 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 + 連結伺服器 + 參數不能很好地結合在一起……

引用自:https://dba.stackexchange.com/questions/14063