问题
When I execute this hardcoded, I get the correct result:
Declare @result nvarchar(32)
Set @result = convert(varchar(32), hashbytes('MD5', '1' + 'One' + 'Two' + 'Three'), 2)
select @result
Result: 4173AB4C6EE66BC1FF7B7E5D44A872CA (correct)
But when I call/execute this stored procedure, giving it the same parameters, it's a different result
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
My execution:
DECLARE @result int
EXEC @result = [db_owner].[CheckTheTransaction]
@DataID = '1',
@Data1 = 'One',
@Data2 = 'Two',
@Data3 = 'Three'
SELECT 'Result' = @result
GO
Result: 5BD42777932EE959AD5A4C9FEE142F00 (wrong)
Where did I go wrong?
回答1:
That is a data type issue. You will see it match by changing the T-SQ script to followings.
Declare @result nvarchar(32)
Set @result = convert(varchar(32), hashbytes('MD5', N'1' + N'One' + N'Two' + N'Three'), 2)
select @result
回答2:
Change all nvarchar datatype as varchar
ALTER Procedure [db_owner].[CheckTheTransaction]
@DataID varchar(50),
@Data1 varchar(50),
@Data2 varchar(50),
@Data3 varchar(50)
as
Declare @result nvarchar(32)
Set @result = convert(varchar(32), hashbytes('MD5', @DataID + @Data1 +
@Data2 + @Data3), 2)
Select @result
回答3:
My team member asked a similar question and accepted the answer that solved it. Comparing a C# generated Checksum with a SQL Server one
来源:https://stackoverflow.com/questions/40910513/sql-server-hashbytes-conversion-inconsistency