以下の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
テーブルの行 1 と行 3 に同じ値が含まれているため、select ステートメントは 2 つの異なる XOR 値を返します。これは私が期待するものです。
約 100 万行にわたって SELECT ステートメントを実行しましたが、個別の XOR 値の数は思ったよりも少なくなっています。CHECKSUM が常に一意であるとは限らないことは認識していますが、2 つの異なる CHECKSUM 文字列 (CHECKSUM (String1, String2) などの複数のパラメーターを持つ) が同じ XOR 値を生成できる場合、このように使用しても安全ですか?
次のように文字列を連結する方が安全ですか: CHECKSUM (String1 + String2) またはバイナリ CHECKSUM?
更新 4 つの値のすべての組み合わせには 2 つの行が含まれます: Row1: String1、String2、String3、String4 Row 2: String3、String4、String1、Strin2
組み合わせごとに1行だけ返したい。