Sql 如何使用表变量作为OPENQUERY的参数

Sql 如何使用表变量作为OPENQUERY的参数,sql,sql-server,tsql,parameters,openquery,Sql,Sql Server,Tsql,Parameters,Openquery,如何使用表变量作为OPENQUERY的参数 比如: DECLARE @TSQL VARCHAR(8000) DECLARE @VAR TABLE (VAR1 VARCHAR (2)) INSERT INTO @VAR values ('CA'),('OR') ,('WA') SELECT @TSQL = 'SELECT * FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state = ''''' + (

如何使用表变量作为OPENQUERY的参数

比如:

DECLARE @TSQL VARCHAR(8000)
DECLARE @VAR TABLE (VAR1 VARCHAR (2))
INSERT INTO @VAR values ('CA'),('OR') ,('WA')
SELECT  @TSQL = 'SELECT * FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state = ''''' + (SELECT VAR1 FROM @VAR)+ ''''''')'
EXEC (@TSQL)

我找到了一个适合我的案例的解决方案:

DECLARE @query varchar(8000)
DECLARE @list VARCHAR(8000)
DECLARE @len int
SET @list = ''
DECLARE @var TABLE (var1 VARCHAR (30))
INSERT INTO @var values ('2015-01-01 00:00:00.000'),('2015-01-02 00:00:00.000') ,('2015-01-03 00:00:00.000')
SELECT @list = @list + ISNULL(var1 + ''''',''''', '')
FROM @var
SET @len = len(@list)
SET @list = ''''''+left(@list,@len-3)
SELECT @query =
    'select *
    FROM openquery([REMOTESERVER],
        ''
        select *
        from [DATABASE].[SCHEMA].[TABLE]
        where FIELD in (' + @list + ')
        '')'
EXEC (@query)

有什么好的理由不:
…在('CA,'OR','WA')中的状态吗?
?我完全支持你@Amit。如果要为动态SQL代码使用参数,应使用sp\u executesql。使用参数调用sp_executesql的示例:Hi Amit和CeOnSql,提供的示例是一个简化。真正的查询在Crystal报表中,这些值不是固定值。报告的用户将在运行时在提示符上选择这些值,因此它们不能硬编码。请对XML路径使用
而不是
选择@var=@var+…
技巧。看见