请看下面的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 值,因为表中的第一行和第三行包含相同的值。这是我所期望的。
我已经在大约一百万行中运行了 SELECT 语句,并且不同 XOR 值的数量比我想象的要少。我意识到 CHECKSUM 并不总是唯一的,但是当两个不同的 CHECKSUM 字符串(具有多个参数,例如 CHECKSUM (String1, String2) 可以生成相同的 XOR 值时,这样使用它是否安全?
像这样将字符串连接在一起更安全:CHECKSUM (String1 + String2) 还是二进制 CHECKSUM?
更新 每个四个值的组合包含两行: Row1:String1、String2、String3、String4 Row 2:String3、String4、String1、Strin2
我只想为每个组合返回一行。