SQL Server のチェックサム関数がこれら 2 つの異なる入力値に対して同じ値を返す理由に興味がありますか?
SELECT CHECKSUM(2792,2847), 2792+2847 » **42399**,5639
SELECT CHECKSUM(2716,3167), 2716+3167 » **42399**,5883
SQL Server のチェックサム関数がこれら 2 つの異なる入力値に対して同じ値を返す理由に興味がありますか?
SELECT CHECKSUM(2792,2847), 2792+2847 » **42399**,5639
SELECT CHECKSUM(2716,3167), 2716+3167 » **42399**,5883
docs CHECKSUM (Transact-SQL) docs を見ると、重複の可能性があり、代わりにHASHBYTES (Transact-SQL)を使用することが示されています
この問題がありました。小数と CheckSum() に問題があるようです。checksum() で使用されるすべての列を varchar にキャストすることで解決しました
例: の代わりにselect checksum(columnA) from dbo.Table
:select checksum(cast(columnA as varchar)) from dbo.Table
SELECT CHECKSUM(CAST(2792 AS VARCHAR), CAST(2847 AS VARCHAR)), 2792+2847
>> -1228994846、5639
SELECT CHECKSUM(CAST(2716 AS VARCHAR), CAST(3167 AS VARCHAR)), 2716+3167
>> 1320541154、5883