Функция HASHBYTES () - PullRequest
0 голосов
/ 04 июля 2011

Как использовать HASHBYTES () в коде TSQL?

проблема с моим кодом:

UPDATE mytable 
   SET hash_value=HASHBYTES('MD5',convert(varchar(max),col1),convert(varchar(max),col2),..)

возвращает NULL.Можете ли вы посоветовать мне, что не так с моим кодом?

Ответы [ 2 ]

4 голосов
/ 04 июля 2011

HASHBYTES принимает два аргумента.Первый - это алгоритм хэширования (MD2 | MD4 | MD5 | SHA | SHA1), а второй - значение для хэширования.Если в качестве алгоритма используется любое другое значение, в результате вы получите NULL.

В результате вы также получите NULL, если значение во втором параметре равно NULL.

Возможно, вы можете использовать что-то вроде этого.

hashbytes('MD5', coalesce(convert(varchar(max),col1), '') + 
                 coalesce(convert(varchar(max),col2), '') +
                 ...)

Объединить строки с + и использовать coalesce для обработки NULL значений.

0 голосов
/ 04 июля 2011

Не зная, что такое col1 в вашем примере кода, это может не дать ответа на ваш вопрос, однако первый аргумент HASHBYTES должен быть algorithm.

С MSDN синтаксис:

 HashBytes ('<algorithm>', { @input | 'input' } )<algorithm>::= MD2 | MD4 | MD5 | SHA | SHA1

Редактировать В статье MSDN также объясняется, что входной параметр является либо строкой, либо ссылкой на переменную типа varchar, nvarchar или varbinary, это один вход. Вы передаете несколько входных параметров. Однако я удивлен, что вы получаете нулевое значение, а не ошибку, которую я получаю, когда пытаюсь запустить функцию The hashbytes function requires 2 argument(s).. Наиболее вероятной причиной получения результата NULL является то, что ваше входное значение равно нулю, то есть ваш столбец, который вы конвертируете в varchar, равен нулю. Если вы запустите select hashbytes('md5', convert(varchar(max), null)), вы получите NULL результат.

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