0

SQL Server のチェックサム関数がこれら 2 つの異なる入力値に対して同じ値を返す理由に興味がありますか?

SELECT CHECKSUM(2792,2847), 2792+2847 » **42399**,5639

SELECT CHECKSUM(2716,3167), 2716+3167 » **42399**,5883
4

2 に答える 2

0

docs CHECKSUM (Transact-SQL) docs を見ると、重複の可能性があり、代わりにHASHBYTES (Transact-SQL)を使用することが示されています

于 2013-05-30T19:48:47.420 に答える
0

この問題がありました。小数と 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

于 2017-04-25T12:17:59.530 に答える