TSQL - 使用Except子句返回表之间的列差异

时间:2017-07-18 09:04:07

标签: sql sql-server-2008 tsql

我使用一个非常简单的脚本来返回两个表之间的差异,'TableA'和一个名为'CopyOfTableA'的TableA副本:

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

这将减去CopyOfTableA表和TableA之间的差异,并仅返回包含差异的行。

这样可以正常工作并返回包含差异的行,但我的要求是返回不同的行,但只填充包含差异的列 以便我可以立即看到行之间的差异。

1 个答案:

答案 0 :(得分: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

请注意,当缺少一行时,它会将所有列显示为差异。此外,您可以通过在两个表上添加值来定制case语句以使其更具信息性。