SQL表之间的完全差异

本文关键字:之间 SQL | 更新日期: 2023-09-27 17:58:49

在我的C#项目中,我用SQL表描述了一些设备,其中所有功能都用几个参数描述,例如:

Function    Position   Default ...
Autoreset   5          0
Power       9          1
Adjust      0          22
...

有时会出现新版本取代前一版本的情况,通常新版本与前一版本相比变化不大。举个例子,有是可能的

  • 功能已删除
  • 添加的函数
  • 函数在某些参数中发生了更改(在上一个示例中,新版本可以将Power默认值从1更改为6)

我希望看到的是一个表中的变化,但不仅仅是两个表之间的差异列表,而是一个具有以下内容的表:

  1. 普通文本的公共值
  2. 以红色粗体添加的值
  3. 以灰色删除的值
  4. 值更改为绿色

我的想法是使用JOIN命令来获得三个表:

  1. 具有通用值的表
  2. 与表1和表2不同的表(表2中增加的值)
  3. 与表2和表1不同的表(表1中增加的值)

我用下面的指令从SQL开始开发

SqlCommand comando = new SqlCommand("select * from " + TableName1 + "  FULL OUTER JOIN " + TableName2 + " ON " + TableName1 + ".FieldName="+ TableName2 +".FieldName", conn);

但我似乎需要指定所有列。是否可以对所有列执行JOIN?

BR

SQL表之间的完全差异

我不太清楚如何在不同的表之间存储数据,但基本上你只需要根据Function列来查看表之间的差异。如果您登记了所有列,那么在结果集中,您将只获得与所有列匹配的记录的非NULL行。因此,要确定差异,您的选择应该是:

select * from TCommon full join T1 on TCommon.[Function] = T1.[Function] full join T2 on TCommon.[Function] = T2.[Function]

如果[Function]找到,结果将为您提供表中的值,否则为NULL。至于着色属性之间的差异,我将确定C#中的差异。

在最常见的选项中,您的结果集将是

TCommon.[Function]    TCommon.A1    T1.[Function]    T1.A1    T2.[Function]    T2.[A1]
Autoreset             1             Autoreset        2        NULL             NULL
Power                 2             NULL             NULL     Power            3
Adjust                3             NULL             NULL     Adjust           3
...     

NULL值表示项目不存在(已删除或未添加),属性差异表示属性已更改。