Sql server 如何在存储过程中使用openquery?

Sql server 如何在存储过程中使用openquery?,sql-server,stored-procedures,openquery,Sql Server,Stored Procedures,Openquery,我必须将参数传递给链接服务器,我必须使用open query,我有一个如下代码: DECLARE @TSQL varchar(8000), @VAR char(2) SELECT @VAR = 'CA' SELECT @TSQL = 'SELECT * INTO newtable FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state = ''''' + @VAR + ''''''')' EXEC

我必须将参数传递给链接服务器,我必须使用open query,我有一个如下代码:

DECLARE @TSQL varchar(8000), @VAR char(2)

SELECT @VAR = 'CA'

SELECT @TSQL = 'SELECT * INTO newtable FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state = ''''' + @VAR + ''''''')'
EXEC (@TSQL)
现在我需要在存储过程中使用它,但是我得到了一个不明确的语法错误。如何在存储过程中使用它?

试试以下方法:

CREATE PROCEDURE [Name]

AS

DECLARE @TSQL varchar(8000), @VAR char(2)
SET @VAR = 'CA'

SET @TSQL = 'SELECT * INTO newtable FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state = ' + @VAR + ' '')'

EXEC (@TSQL)

为什么要使用动态SQL?为什么不直接从OPENQUERY中将*选择到新表中(MyLinkedServer,'从pubs.dbo.authors中选择*,其中state='+QUOTENAME(@Var,'')+'')因为我没有使用pubs.dbo.authors,而是使用了一个函数,比如:authors(null,''''+@ToDate+'''',null,null,null,null,null,null,null,null,null,null),发布完整的错误消息-所有这些。如果不查看代码创建的动态sql,就无法调试它,对吗?因此,发布
@TSQL
的内容并亲自检查。