找出在SQL Server中比较两个表时更改的列

时间:2018-10-16 10:00:13

标签: sql sql-server

我有一个表TableA,其中有10列,大约有4000行。 完成一些计算后,表中进行了一些更改。为了获得这些更改,我首先在计算之前进行备份,然后在计算之后进行备份。 所以现在我有2个表TableA_backup1和TableA_backup2。 现在,我需要了解使用上述2个表在行中哪些列发生了具体更改。

有帮助吗?

1 个答案:

答案 0 :(得分:0)

如果您只想在行和列的“矩阵”中每个单元格使用0/1或true / false来指示列是否已更改,那么您可以简单地通过主键将两个表连接起来:

SELECT
    CASE WHEN t1.col1 = t2.col1 THEN 0 ELSE 1 END AS col1,
    CASE WHEN t1.col2 = t2.col2 THEN 0 ELSE 1 END AS col2,
    ...      -- other columns
FROM TableA_backup1 t1
INNER JOIN TableA_backup2 t2
    ON t1.pk = t2.pk
ORDER BY
    t1.pk;

这没有考虑从一个备份快照到另一个备份快照可能丢失或添加了行的可能性。但是,在这种情况下,如果两行根本不匹配,那么我们无论如何都无法真正比​​较列值。