2017-07-18 61 views
0

我是個很簡單的腳本返回兩個表,「表A」和表A的副本名爲「CopyOfTableA」之間的差異表之間列差異:TSQL - 使用except子句返回使用

SELECT TableId, Column1, Column2 FROM CopyOfTableA 
EXCEPT 
SELECT TableId, Column1, Column2 FROM TableA 

這將減去CopyOfTableA表和TableA之間的差異,並僅返回包含差異的那些行。

這工作正常,返回包含不同的行,但我的要求是返回不同的行,但只有填充包含不同 這樣我就可以馬上看到的差異行之間的列。

+0

我唯一能想到的就是完全連接並單獨比較列。 – Jayvee

+0

謝謝Jayvee,你有沒有一個解決方案的例子,生病了嗎?當你說單獨比較列時,我將使用哪個操作符? –

回答

1

東西就這些線:

select case when isnull(a.TableId,0)<>isnull(b.TableId,0) then 'Difference' else 'OK' end as TableIdCompare, 
    case when isnull(a.column1,'')<>isnull(b.Column1,'') then 'Difference...' else 'OK' as Column1Compare, 
    case when isnull(a.column2,'')<>isnull(b.Column2,'') then 'Difference...' else 'OK' as Column2Compare, 
from CopyOfTableA a 
full join TableA b 

請注意,當行缺少它會顯示所有列的差異。此外,您可以通過在兩個表格上添加值來定製案例陳述,以獲得更多信息。

+0

應該'從CopyOfTableA b'別名爲A而不是B? –

+0

另外,這種解決方案如何在具有幾百萬行的表上運行?全連接會爲腳本執行增加額外的開銷嗎? –

+0

我修改了查詢謝謝。是的,完整連接比集合連接要貴得多。根據列的數量,你也可以嘗試除了Key,Column一個接一個並且聯合結果 – Jayvee