除SQL Server中的SQL语句不返回预期的结果
我有两个相同的表,但驻留在不同的服务器上。一张桌子缺少我已验证的一行。我试图通过除SQL Server中的SQL语句不返回预期的结果
SELECT GUID FROM dbo.tableA
EXCEPT
SELECT GUID FROM [Server2].MyDatabase.dbo.tableA
或其他方式对这些表进行比较,发现了丢失记录
各地
SELECT GUID FROM [Server2].MyDatabase.dbo.tableA
EXCEPT
SELECT GUID FROM dbo.tableA
两个查询返回结果为零。我在两张桌上都使用了select count(*)
,并且计数不同
我在做什么错?
感谢您的任何反馈提前
计数可以是不同的,它仍然是可能的except
返回零行。怎么样?如果一个或两个表中有重复。
这里是一个修改,可以帮助你找到的差异:
SELECT GUID, ROW_NUMBER() OVER (PARTITION BY GUID ORDER BY GUID) as seqnum
FROM dbo.tableA
EXCEPT
SELECT GUID, ROW_NUMBER() OVER (PARTITION BY GUID ORDER BY GUID) as seqnum
FROM [Server2].MyDatabase.dbo.tableA
以我的经验与链接服务器工作时如预期EXCEPT
操作不起作用。为什么?我不知道。
作为一种变通方法我插入从远程服务器中的行到本地临时表,然后可以比较:(I也本地一个复制到第二临时表出于其它原因)
Select GUID
Into #Server2_tblA
From [Server2].MyDatabase.dbo.tableA;
Select GUID
Into #Local_tblA
From dbo.tableA;
Select GUID From #Server2_tblA
Except
Select GUID From #Local_tblA;
...
表A值在MyDatabase.dbo.tableA.Using不提出不存在caluse为得到这样的结果
SELECT GUID
FROM dbo.tableA WHERE NOT EXISTS(SELECT 1
FROM [Server2].MyDatabase.dbo.tableA
WHERE GUID = [Server2].MyDatabase.dbo.tableA.GUID)
虽然这可能是一个有效的答案,但你更可能通过解释代码的作用和工作原理来帮助他人。仅有代码的答案往往会得到较少的积极关注,并没有其他答案那么有用。 – Aurora0001
当你设置这取决于订单,它是基于集合理论。
- 2,3,4不具有(=除外)3 - >使用的值2设定4
- 3无2,3,4 - >这意味着空集
- 3,3, 4无1,2,3(这是你的情况下) - >它装置设定与只有一个值4
除装置过滤来自第一组,其中,值包含在第二集合中的任何一行。您的查询返回相同的输出,因为您的表中存在重复的行(具有相同的值)。
请勿使用except/intersect
- 请使用exists
,in
或join
条款。
这工作得很好,速度非常快 –