Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
找出在sql server中比较两个表时更改的列_Sql_Sql Server - Fatal编程技术网

找出在sql server中比较两个表时更改的列

找出在sql server中比较两个表时更改的列,sql,sql-server,Sql,Sql Server,我有一个表TableA,有10列,大约4000行。 在做了一些计算之后,表中有一些变化。为了得到这些变化,我先在计算前备份,然后在计算后备份。 现在我有两张表,分别是TableA_backup1和TableA_backup2。 现在我需要知道使用上述两个表在行中具体更改了哪些列 有什么帮助吗?如果您只需要一个由行和列组成的矩阵,每个单元格中都有一个0/1或true/false,指示列是否已更改,那么您只需通过主键连接两个表即可: SELECT CASE WHEN t1.col1 = t2

我有一个表TableA,有10列,大约4000行。 在做了一些计算之后,表中有一些变化。为了得到这些变化,我先在计算前备份,然后在计算后备份。 现在我有两张表,分别是TableA_backup1和TableA_backup2。 现在我需要知道使用上述两个表在行中具体更改了哪些列


有什么帮助吗?

如果您只需要一个由行和列组成的矩阵,每个单元格中都有一个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;

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

您使用的是哪种sql语言?添加tag@GeorgeMenoutis您是否有一个自动脚本,可以将该答复添加到任何标记为“SQL”的问题中?如果一个问题在标准SQL中完全可以回答,没有理由强迫提问者将他们的问题限制在特定的方言中。我希望你有一个主键。microsoft sql Server是的,我有一个主键实际上我也在做同样的事情,但是如果我们有很多列,那么我们需要为所有列添加case语句。@JohnM:然后尝试执行动态sqlquery@JohnM ,我认为上面的脚本很好,你只有10列。您也可以在where子句中添加条件。否则,您可以解释完整的场景,例如为什么要进行备份。如果有其他计算,那么您将再次进行备份。保留多长时间。为什么不更新一列