2012-08-16 79 views
0

參數我想創建一個使用參數的OPENQUERY像下面的功能:功能與OPENQUERY

CREATE FUNCTION fnMyFunction (@myVar INT) RETURNS TABLE AS 
    DECLARE @Query VARCHAR(2000) 
SET @Query = 'SELECT * FROM OPENQUERY(myLinkedServer, ''SELECT num FROM tblMyTable WHERE 
myTableNum = '+ @myVar + ' '')' 

RETURN EXEC(@Query) 

的OPENQUERY應該只返回一個整數。我試過

...RETURNS INT AS 
...OPENQUERY... 
DECLARE @num INT 
SET @num = 0 
@num = EXEC(@Query) 
RETURN @num 

並且得到帶有返回值的RETURN語句不能用在這個上下文中。

回答

0

我不認爲你可以在一個函數中使用這種類型的呼叫(openquery)。

用戶定義的函數不允許使用動態SQL,並將其視爲動態SQL。

所以我相信你唯一的選擇就是創建一個存儲過程來返回該值。或者在使用它之前創建一個臨時表並在存儲過程中使用它。

這裏是other limitations of UDFs

一篇文章你將不得不只是使呼叫在使用它之前:

DECLARE @Query VARCHAR(2000) 
DECLARE @myVar INT 
SET @myVar = yourValue 

SET @Query = 'SELECT * FROM OPENQUERY(myLinkedServer, ''SELECT num FROM tblMyTable WHERE 
myTableNum = '+ @myVar + ' '')' 

EXEC(@Query)