我正在查询链接服务器:
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
变量进行查询,因为它不是表格。
我该怎么做?
答案 0 :(得分:0)
创建表变量或临时表。插入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
';
答案 1 :(得分:0)
使用提示表单here
解决了我的问题代码:
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;
像魅力一样。
亲切的问候