请看下面的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 第2行:String3,String4,String1,Strin2
我只想为每个组合返回一行。
答案 0 :(得分:0)
我的解决方案在这里找到:How to do bitwise exclusive OR in sql server between two binary types?。它涉及将每8个字节拆分为二进制(8)。