當我執行這個硬編碼,我得到正確的結果: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'將返回相同的散列值。 –