2016-11-25 1 views
2

동일한 서버이지만 서로 다른 서버에있는 두 개의 테이블이 있습니다. 하나의 테이블에 내가 확인한 행이 없습니다. 나는 주위SQL Server의 EXCEPT SQL 문이 예상 결과를 반환하지 않습니다.

SELECT GUID FROM [Server2].MyDatabase.dbo.tableA 
EXCEPT 
SELECT GUID FROM dbo.tableA 

두 쿼리가 제로 결과를 반환

SELECT GUID FROM dbo.tableA 
EXCEPT 
SELECT GUID FROM [Server2].MyDatabase.dbo.tableA 

또는 다른 방법으로 누락 된 기록

을 찾기 위해이 테이블을 비교하기 위해 노력하고 있습니다. 나는 두 테이블 모두에 select count(*)을 사용했으며 수는 다릅니다.

내가 뭘 잘못하고 있니? 미리

답변

4

카운트의 어떠한 피드백

덕분 다를 수 있으며 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 
+0

이 코드는 효과적이고 매우 빠릅니다. –

0

: 여기

은 당신이 차이를 찾을 수 있습니다 수정합니다. 왜? 나는 모른다.

는 해결 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; 
... 
0

표 A 값 (I는 다른 이유로 제 임시 테이블에 로컬 한 복사) 이 결과 사용자가 설정 한이 순서에 따라 달라집니다이 집합 이론을 기반으로

SELECT GUID 
FROM dbo.tableA WHERE NOT EXISTS(SELECT 1 
           FROM [Server2].MyDatabase.dbo.tableA 
           WHERE GUID = [Server2].MyDatabase.dbo.tableA.GUID) 
+0

유효한 답변 일 수 있지만 코드의 기능과 작동 방식을 설명함으로써 다른 사용자를 도울 가능성이 훨씬 큽니다. 코드 전용 답변은 긍정적 인 관심을 덜받는 경향이 있으며 다른 대답만큼 유용하지는 않습니다. – Aurora0001

0

을 얻기 위해 MyDatabase.dbo.tableA.Using에 표시되지 않습니다 caluse 존재하지 않습니다. 값 2로 설정> 4

  • 3 2 없음, 3, 4 - -없는

    • 2, 3, 4 (= 제외) 3>는 빈 세트
    • 3,3 수단 1, 2, 3없이 4를 선택하십시오. -> 하나의 값으로 설정된 것을 의미합니다. 4

    예외는 값이 두 번째 세트에 들어있는 첫 번째 세트의 모든 행을 필터링합니다. 테이블에 중복 된 행 (같은 값)이 있으므로 쿼리가 동일한 출력을 반환합니다.

    except/intersect을 사용하지 마십시오. exists, in 또는 join 절을 사용하십시오.

  • 관련 문제