1

我在一个数据库中有多个表,用于与脱机访问数据库进行比较,并查看该脱机访问数据库是否与这些预定表中的任何一个匹配。这些表在结构上都是相同的,但包含不同的值;我将通过仅使用一列“设定点”来简化它。

我正在使用这段代码:

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  

这是一个合适的解决方案吗?这会为表格返回不同的结果吗?我错过了什么吗?有没有更好的方法将表中的多个列与其他表进行比较?

4

0 回答 0