检测表之间差异的有效方法 - 除了不起作用

Efficient way to detect difference between tables in - EXCEPT not working

我尝试使用 EXCEPT(不确定是否最好?):

IF OBJECT_ID('tempdb..#t1') IS NOT NULL DROP TABLE #t1;
IF OBJECT_ID('tempdb..#t2') IS NOT NULL DROP TABLE #t2;

SELECT 
    *
INTO #t1
FROM 
(
    SELECT '001' AS id, '1' AS type, 40 AS cost
        UNION 
    SELECT '002' AS id, '2' AS type, 50 AS cost
) AS IQ1;

SELECT 
    *
INTO #t2
FROM 
(
    SELECT '001' AS id, '1' AS type, 40 AS cost
        UNION 
    SELECT '002' AS id, '2' AS type, 50 AS cost
        UNION 
    SELECT '003' AS id, '2' AS type, 50 AS cost
) AS IQ1;

SELECT * FROM #t1;
SELECT * FROM #t2;

SELECT * FROM #t1
    EXCEPT
SELECT * FROM #t2;

它似乎不起作用。有任何想法吗?用例是有效地检测#t2 中的新行,但也有差异,例如我们:

SELECT '002' AS id, '2' AS type, 51 AS cost

此处的 51 与 #t1 中的 50 不同。希望这是有道理的?

我想你也想比较#t2 和#t1。 #t2 有更多行。

EXCEPT 运算符将 select 来自 第一个 table 的所有行,并删除 中的所有行]秒table。所以如果 #t2 有更多的行,你永远不会知道。

  SELECT * FROM #t1
  EXCEPT
  SELECT * FROM #t2
  UNION ALL
  SELECT * FROM #t2
  EXCEPT
  SELECT * FROM #t1;