我对SQL很新,我希望有人可以帮助我解决我遇到的问题。我找不到任何答案,帮助我找出这个确切的问题。
我在两个不同服务器上的两个SQL Server数据库中有两个表,我想使用列ItemID进行比较。我想从Table1中找到具有Table2中不存在的ItemID的记录,并将它们插入到表变量中。我有以下代码:
--Create table variable to hold query results
DECLARE @ItemIDTable TABLE
(
[itemid][NVARCHAR](20) NULL
);
--Query data and insert results into table variable
INSERT INTO @ItemIDTable
([itemid])
SELECT a.[itemid]
FROM database1.dbo.table1 a
WHERE NOT EXISTS (SELECT 1
FROM [Database2].[dbo].[table2]
WHERE a.itemid = [Database2].[dbo].[table2].[itemid])
ORDER BY itemid
这适用于测试服务器,其中两个数据库位于同一服务器上,但不在现实生活中,它们位于不同的服务器上。我使用OPENQUERY尝试了以下操作,但我知道我没有完全正确。
--Create table variable to hold query results
DECLARE @ItemIDTable TABLE
(
[ItemID][nvarchar](20) NULL
);
--Query data and insert results into table variable
INSERT INTO @ItemIDTable
([ItemID])
SELECT a.[ItemID]
FROM Database1.dbo.Table1 a
WHERE NOT EXISTS (SELECT 1
FROM OPENQUERY([Server2], SELECT * FROM [Database2].[dbo].[Table2]')
WHERE a.ItemID = [Database2].[dbo].[Table2].[ItemID])
ORDER BY ItemID
我很确定我需要在WHERE子句中做一些事情,我在两台服务器上有两个数据库,我只是不太确定如何构建它。有人可以帮忙吗?
答案 0 :(得分:1)
Openquery的工作原理如下:
select *
from openquery
(LINKED_SERVER_NAME,
'select query goes here'
)
请注意,sql部分是单引号。这意味着如果有必要,您可能需要引用引号。例如:
select *
from openquery
(LINKED_SERVER_NAME,
'
select SomeTextField
from SomeTable
where SomeDateField = ''20141014''
'
)
答案 1 :(得分:1)
您无法创建与外部查询相关的OPENQUERY。您可以使用OPENQUERY的结果填充临时表,并对临时表执行WHERE NOT EXISTS,或者您可能希望查看Synonyms。