Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从OpenQuery结果中筛选记录_Sql_Tsql_Sql Server 2014 - Fatal编程技术网

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;