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)
我希望看到的是一个表中的变化,但不仅仅是两个表之间的差异列表,而是一个具有以下内容的表:
- 普通文本的公共值
- 以红色粗体添加的值
- 以灰色删除的值
- 值更改为绿色
我的想法是使用JOIN命令来获得三个表:
- 具有通用值的表
- 与表1和表2不同的表(表2中增加的值)
- 与表2和表1不同的表(表1中增加的值)
我用下面的指令从SQL开始开发
SqlCommand comando = new SqlCommand("select * from " + TableName1 + " FULL OUTER JOIN " + TableName2 + " ON " + TableName1 + ".FieldName="+ TableName2 +".FieldName", conn);
但我似乎需要指定所有列。是否可以对所有列执行JOIN?
BR
我不太清楚如何在不同的表之间存储数据,但基本上你只需要根据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值表示项目不存在(已删除或未添加),属性差异表示属性已更改。