我想知道如何将列表传递到
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)
但是,我需要能够使用类似的条件
WHERE state IN ('CA', 'TX', 'SD')
而不是
= '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
如果你执行
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, ',', ''''',''''') + ''''')''