比较2行并显示列名和更改数据的差异

时间:2016-11-08 14:36:52

标签: php sql-server

我们有两个具有相同结构的表(MSSQL) 我们想比较一下 来自table1的(ID)122 同 表2中的最高ID 122

如果存在一个或多个差异,我们希望显示该列的名称及其从两个表中保存的数据。

我不想列出所有列,因为有超过150个

像(伪)的东西: -

Select * from table1 
Select * from table2

Compare table1 (column by column) with table2 (column by column)

显示更改: -

'姓名'是'约翰'现在'詹姆斯'改变3/11/2016 3.45pm 'Mobilenum'是'02373643743'现在'0983783738'已改变4/11/2016 12.46pm

不想尝试触发器......需要php代码.... 我们不应该提供任何列名,因为它应该动态地运行它们......

1 个答案:

答案 0 :(得分:0)

为什么你不想列出列 - 这个表是否会定期更改? 您仍然可以动态创建SQL - 但将其存储为静态字符串。 很多例子(提示使用information_schema.columns) 如果表格不是很大,那么我会写[抢写一堆测试(每列1个)和UNION所有它们在一起 - 然后只返回数据,其中diff = true 例如

    Select * from 
    (
    Select case when ISNULL(table1.columnA, -999) <>  ISNULL(table2.columnA, -999) then 1 else 0 end as diff, table1.columna as Old_Val, table2.columnA as new_val
    from table1 join table2 on ...
    UNION ALL
    /* etc etc * 150 ... */
    ) as x

where x.diff = 1