Когда я выполняю это жёстко, я получаю правильный результат:Непоследовательность конверсии SQL Server HASHBYTES?
Declare @result nvarchar(32)
Set @result = convert(varchar(32), hashbytes('MD5', '1' + 'One' + 'Two' + 'Three'), 2)
select @result
Результат: 4173AB4C6EE66BC1FF7B7E5D44A872CA (правильный)
Но когда я звоню/выполнить эту хранимую процедуру, придавая ему те же параметры, это другой результат
ALTER Procedure [db_owner].[CheckTheTransaction]
@DataID nvarchar(50),
@Data1 nvarchar(50),
@Data2 nvarchar(50),
@Data3 nvarchar(50)
as
Declare @result nvarchar(32)
Set @result = convert(varchar(32), hashbytes('MD5', @DataID + @Data1 + @Data2 + @Data3), 2)
Select @result
Мой исполнение:
DECLARE @result int
EXEC @result = [db_owner].[CheckTheTransaction]
@DataID = '1',
@Data1 = 'One',
@Data2 = 'Two',
@Data3 = 'Three'
SELECT 'Result' = @result
GO
Результат: 5BD42777932EE959AD5A4C9FEE142F00 (неправильно)
Где я ошибся?
Я предполагаю, что '' 1'' является VARCHAR и вы передаете NVARCHAR. Я готов поспорить, что оба значения правильные - только второй - UTF16. –
Хотя ваша хеш-функция кажется вообще плохой, '@ Data1 = 'XX', @ Data2 = 'YY'' и' @ Data1 =' XXY ', @ Data2 =' Y'' вернет одно и то же значение хэш-функции. –