2012-08-16 80 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)