Различное значение контрольной суммы для '-' в SQL Server 2008 и 2016, поэтому нельзя сравнивать измененные данные - PullRequest
0 голосов
/ 01 апреля 2019

В 2008 году значение контрольной суммы для «-» равно 45, а в 2016 году - 0. Поэтому, когда мы вычисляем контрольную сумму для одного значения, например «AS» и «AS-», контрольная сумма для этих двух значений отличается в SQL Server 2008 и в2016, значение контрольной суммы такое же.Я хочу другое значение, как SQL Server 2008 для выполнения некоторых операций

На SQL 2008-

select checksum('AA')   --o/p- 2158
select checksum('AA-')  --o/p- 34509

на 2016-

select checksum('AA')   --o/p- 34472462
select checksum('AA-')  --o/p- 34472462

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Различия не связаны с версией SQL Server, возможно, ваш сервер 2016 имеет параметры сортировки, включающие символы Unicode

С varchar

select checksum('AA')   --o/p- 2158
select checksum('AA-')  --o/p- 34509

С nvarchar

select checksum(N'AA')   --o/p- 34472462
select checksum(N'AA-')  --o/p- 34472462

Вы можете попробовать кастовать как varchar

select checksum(CAST('AA' AS VARCHAR))   --o/p- 2158
select checksum(CAST('AA-' AS VARCHAR))  --o/p- 34509

Если нет, то это сопоставление сработало для меня

select checksum(CAST('AA' COLLATE SQL_Latin1_General_Pref_CP1_CI_AS as varchar))
0 голосов
/ 01 апреля 2019

На контрольную сумму и binary_checksum влияют настройки локали и чувствительности к регистру сервера.Varbinary преобразуется в строку, затем применяется контрольная сумма.Скорее всего, ваши настройки на разных серверах разные.

MSDN - BINARY_CHECKSUM выдает разные результаты для одного и того же значения

Я предполагаю, что это так для CHECKSUM, так какну ... Возможно, что-то вроде этого работает правильно на обоих серверах:

SELECT CHECKSUM('AA' COLLATE Latin1_General_CI_AS)

Редактировать: мой ответ неверен.Кажется, что мое предложение, включив COLLATE, не дает ожидаемого эффекта.Я удалю свой ответ в ближайшее время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...