我在一个数据库中有多个表,用于与脱机访问数据库进行比较,并查看该脱机访问数据库是否与这些预定表中的任何一个匹配。这些表在结构上都是相同的,但包含不同的值;我将通过仅使用一列“设定点”来简化它。
我正在使用这段代码:
USE OvenGroups
EXECUTE sp_MSforeachtable '
Insert Into #TempChecksum (CheckSumResults, ProfileName)
Select CHECKSUM_AGG(Checksum([Setpoint]), SUBSTRING("[?]", 10, len("[?]")-12)
From ?
With (NOLOCK)
'
创建我在数据库中的表的校验和,然后将它们相互比较。这一直很好,直到我比较了 [Setpoint] 中具有完全不同值的两个表并得到相同的校验和:
Table1:Table2
170:120
170:120
180:135
180:135
200:155
200:155
220:235
220:235
255:255
255:255
180:220
180:220
(两个表的其余部分共享相同的值)
Results:
CheckSum Table Name
1130627072 6Z13A
1130627072 TestTest
现在我真的不明白这两个完全不同的数据集如何返回不同的校验和,但我现在使用 CHECKSUM_AGG(Cast(HASHBYTES()as int) 来获取我的校验和,并且我正在提出唯一值:
USE OvenGroups
EXECUTE sp_MSforeachtable '
--minusovbious has everything execpt the previous setpoint vaule
Insert Into #TempChecksum (CheckSumResults, ProfileName)
Select CHECKSUM_AGG(Cast(HASHBYTES(''SHA2_256'', CONCAT_WS(''|'', [Setpoint], (all my other columns), SUBSTRING("[?]", 10, len("[?]")-12)
From ?
With (NOLOCK)
'
结果:
CheckSum Table Name
-631830728 TestTest
-1375519242 6Z13A
这是一个合适的解决方案吗?这会为表格返回不同的结果吗?我错过了什么吗?有没有更好的方法将表中的多个列与其他表进行比较?