1

当我执行这个硬编码时,我得到了正确的结果:

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(错误)

我哪里做错了?

4

3 回答 3

2

这是一个数据类型问题。通过将 T-SQ 脚本更改为以下内容,您将看到它匹配。

声明@result nvarchar(32)

设置@result = convert(varchar(32), hashbytes('MD5', N'1' + N'One' + N'Two' + N'Three'), 2)

选择@结果

于 2017-07-05T14:18:59.663 回答
1

将所有 nvarchar 数据类型更改为 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
于 2016-12-01T12:24:48.873 回答
1

我的团队成员问了一个类似的问题并接受了解决它的答案。 将 C# 生成的校验和与 SQL Server 进行比较

于 2016-12-04T12:40:30.567 回答