[英]EXCEPT SQL statement in SQL Server not returning expected results
我有兩個相同的表,但它們位於不同的服務器上。 一個表缺少我已驗證的行。 我正在嘗試比較這些表以查找丟失的記錄
通過
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
返回零行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
運算符無法正常工作。 為什么? 我不知道。
作為一種解決方法,我將遠程服務器中的行插入本地臨時表中,然后進行比較:(出於其他原因,我還將本地本地表復制到第二個臨時表中)
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中顯示。使用不存在獲取此結果的原因
SELECT GUID
FROM dbo.tableA WHERE NOT EXISTS(SELECT 1
FROM [Server2].MyDatabase.dbo.tableA
WHERE GUID = [Server2].MyDatabase.dbo.tableA.GUID )
設置后,它取決於順序,它基於集合論。
除表示從第一組中篩選出任何行,其中值包含在第二組中。 您的查詢返回相同的輸出,因為表中存在重復的行(具有相同的值)。
請不要使用except/intersect
-利用exists
, in
或join
的條款。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.