在OPENROWSET查询中使用变量

Con*_*eak 30 sql sql-server openrowset sql-server-2008

我遇到此查询时遇到问题:

SELECT * 
FROM OPENROWSET(
    'SQLNCLI',
    'DRIVER={SQL Server};',
    'EXEC dbo.sProc1 @ID = ' + @id 
 )
Run Code Online (Sandbox Code Playgroud)

给出错误:

'+'附近的语法不正确.

任何人都知道我为什么会收到这个错误?

pra*_*een 47

正如Scott所建议的那样,你不能在中使用表达式.OPENROWSET尝试创建一个动态的sql来传递参数

Declare @ID int
Declare @sql nvarchar(max)
Set @ID=1
Set @sql='SELECT * 
FROM OPENROWSET(
               ''SQLNCLI'',
               ''DRIVER={SQL Server};'',
               ''EXEC dbo.usp_SO @ID =' + convert(varchar(10),@ID) + ''')'

-- Print @sql
 Exec(@sql)
Run Code Online (Sandbox Code Playgroud)


Sco*_*ott 11

OPENROWSET需要字符串文字,而不是表达式.它正在抱怨加号,因为它不会指望任何超过字符串文字的东西,并且您使用运算符将​​字符串文字与之相关联.

请参阅http://msdn.microsoft.com/en-us/library/ms190312.aspx,其中说明:

"查询"

是由提供程序发送并执行的字符串常量...