带有列表参数的TSQL Openquery

问题描述 投票:0回答:1

我想知道如何将列表传递到 openquery 中。要使用单个值,可以使用以下方法:

DECLARE @TSQL varchar(8000), @VAR char(2)
SELECT  @VAR = 'CA'
SELECT  @TSQL = 'SELECT * FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state = ''''' + @VAR + ''''''')'
EXEC (@TSQL)

包括OPENQUERY中的参数

但是,我需要能够说出 ('CA', 'TX', 'SD') 中的 WHERE 状态,而不是 = 'CA'。我尝试了很多事情但没有运气。感谢帮助。

我尝试使用以下解决方案,但失败了。

DECLARE @list NVARCHAR(MAX)
SET @list = 'value1, value2, value3' -- Replace this with your list of values

DECLARE @sql NVARCHAR(MAX)
SET @sql = '
SELECT * 
FROM OPENQUERY([YourLinkedServerName], 
    ''SELECT * 
      FROM YourRemoteTable 
      WHERE YourColumn IN (''' + REPLACE(@list, ',', ''',''') + ''')''
    )'

EXEC sp_executesql @sql
t-sql openquery
1个回答
0
投票

如果你执行

PRINT @sql
,你会看到动态查询是

SELECT * 
FROM OPENQUERY([YourLinkedServerName], 
    'SELECT * 
      FROM YourRemoteTable 
      WHERE YourColumn IN ('value1',' value2',' value3')'
    )

这是错误的。您需要在动态查询中加倍单引号

SELECT * 
FROM OPENQUERY([YourLinkedServerName], 
    'SELECT * 
      FROM YourRemoteTable 
      WHERE YourColumn IN (''value1'','' value2'','' value3'')'
    )

所以在形成

@sql
时,应该是

IN (''''' + REPLACE(@list, ',', ''''',''''') + ''''')'' 
© www.soinside.com 2019 - 2024. All rights reserved.