Sql 从OpenQuery结果中筛选记录
我正在查询链接服务器:Sql 从OpenQuery结果中筛选记录,sql,tsql,sql-server-2014,Sql,Tsql,Sql Server 2014,我正在查询链接服务器: DECLARE @result nvarchar(max); SET @Sql = N' SELECT * FROM OPENQUERY(DATABASE_' + UPPER(@Environment) + ', '' Complex Query against the linked server... '');' EXECUTE sp_executesql @sql, @result OUTPUT 在
DECLARE @result nvarchar(max);
SET @Sql = N'
SELECT *
FROM OPENQUERY(DATABASE_' + UPPER(@Environment) + ', ''
Complex Query against the linked server...
'');'
EXECUTE sp_executesql @sql, @result OUTPUT
在将结果插入正确的表之前,我必须过滤一些结果行。我无法在原始查询中筛选它们,因为结果必须与目标表中的值匹配
比如:
INSERT INTO targetTable
SELECT * FROM @result AS r
WHERE r.Col1 NOT IN (SELECT Col1 FROM targetTable)
AND r.Col2 NOT IN (SELECT Col2 FROM targetTable)
我不能使用@results
变量进行查询,因为它不是表
如何执行此操作?创建表变量或临时表。插入openquery中的记录。下面是一个带有表变量的示例
declare @tableVar as table (
field1 varchar(10)
, field2 int
etc
);
declare @sql as nvarchar(max);
set @sql = '
SELECT value1, value2, etc
FROM OPENQUERY(DATABASE_' + UPPER(@Environment) + ', ''
Complex Query against the linked server...
'');
insert into @tableVar
EXECUTE sp_executesql @sql
';
用提示表解决了我的问题 代码: 工作起来很有魅力
你好,谢谢你的回复。您确定@sql变量中的“EXECUTE sp_executesql@sql”吗?我把它放在外面,但是如果我试图查询“SELECT*FROM@tmpTable;”,我会得到“必须声明表变量'@tmpTable'。”。
DECLARE @linkedServer varchar(50) = 'linkedServerName';
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = N'
INSERT INTO [DatabaseName].[Schema].[Table]
SELECT
t1.Column1
FROM OPENQUERY(' + @linkedServer + ',
''
complex query here
) AS t1
WHERE t1.Column1 NOT IN (SELECT Column1 FROM [DatabaseName].[Schema].[Table])
;
';
EXECUTE sp_executesql @sql;