Sql 同时使用校验和与异或

Sql 同时使用校验和与异或,sql,sql-server-2005,Sql,Sql Server 2005,请查看下面的SQL: create table ChecksumTest (id int not null identity, string1 varchar(10), string2 varchar(10), string3 varchar(10), string4 varchar(10), checksumvalue int) insert into ChecksumTest (string1,string2,string3,string4) values ('Ian', 'Marie

请查看下面的SQL:

 create table ChecksumTest (id int not null identity, string1 varchar(10), 
string2 varchar(10), string3 varchar(10), string4 varchar(10), checksumvalue int)

insert into ChecksumTest (string1,string2,string3,string4) values ('Ian', 'Marie', 'Sharon', 'Mark')
insert into ChecksumTest (string1,string2,string3,string4) values ('Steven', 'Robert', 'Amy', 'Andy')
insert into ChecksumTest (string1,string2,string3,string4) values ('Sharon', 'Mark','Ian','Marie')

select distinct checksum1 ^ checksum2 As xor from (
select CHECKSUM(string1,string2) as checksum1, CHECKSUM(string3,string4) as checksum2
from ChecksumTest) As Checksums
select语句返回两个不同的XOR值,因为表中的第1行和第3行包含相同的值。这就是我所期望的

我已经在大约一百万行上运行了SELECT语句,不同的XOR值的数量比我想象的要少。我意识到校验和并不总是唯一的,但当两个不同的校验和字符串(具有多个参数,例如校验和(String1,String2)可以生成相同的XOR值时,这样使用它安全吗

像这样将字符串连接在一起更安全:校验和(String1+String2)还是二进制校验和

更新 四个值的每个组合包含两行: 第1行:第1行、第2行、第3行、第4行 第2行:第3行、第4行、第1行、第2行


我只想为每个组合返回一行。

在这里找到了我的解决方案:。它涉及将每8个字节拆分为二进制(8).

您可以查看如何构建哈希值。但是,只有将字符串合并才能生成具有不同值的相同哈希,因此您必须使用delimter@SirRufo,谢谢。你能解释一下添加一个散列值会达到什么效果吗?它对每一行都是唯一的吗?散列值是大校验和,在大多数情况下都是唯一的。你认为是什么你想完成什么?快速比较不同的行?你在考虑多少字段?@Gordon Linoff,谢谢。我已经更新了我的问题。这能让问题更清楚吗?