簡體   English   中英

SQL Server中的EXCEPT SQL語句未返回預期結果

[英]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 )

設置后,它取決於順序,它基於集合論。

  • 2,3,4不帶(= except)3->用值2,4設置
  • 3不帶2、3、4->表示空集
  • 3、3、4不帶1、2、3(取決於您的情況)->表示僅設置一個值4

除表示從第一組中篩選出任何行,其中值包含在第二組中。 您的查詢返回相同的輸出,因為表中存在重復的行(具有相同的值)。

請不要使用except/intersect -利用existsinjoin的條款。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM