SQL服务器HASHBYTES转换不一致?
SQL Server HASHBYTES conversion inconsistency?
当我执行这个硬编码时,我得到了正确的结果:
Declare @result nvarchar(32)
Set @result = convert(varchar(32), hashbytes('MD5', '1' + 'One' + 'Two' + 'Three'), 2)
select @result
结果: 4173AB4C6EE66BC1FF7B7E5D44A872CA(正确)
但是当我call/execute这个存储过程,给它相同的参数时,它是不同的结果
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(错误)
我哪里错了?
将所有 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
我的团队成员问了一个类似的问题并接受了解决问题的答案。
那是数据类型问题。通过将 T-SQ 脚本更改为以下内容,您将看到它匹配。
声明@result nvarchar(32)
设置@result = convert(varchar(32), hashbytes('MD5', N'1' + N'One' + N'Two' + N'Three'), 2)
select @结果
当我执行这个硬编码时,我得到了正确的结果:
Declare @result nvarchar(32)
Set @result = convert(varchar(32), hashbytes('MD5', '1' + 'One' + 'Two' + 'Three'), 2)
select @result
结果: 4173AB4C6EE66BC1FF7B7E5D44A872CA(正确)
但是当我call/execute这个存储过程,给它相同的参数时,它是不同的结果
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(错误)
我哪里错了?
将所有 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
我的团队成员问了一个类似的问题并接受了解决问题的答案。
那是数据类型问题。通过将 T-SQ 脚本更改为以下内容,您将看到它匹配。
声明@result nvarchar(32)
设置@result = convert(varchar(32), hashbytes('MD5', N'1' + N'One' + N'Two' + N'Three'), 2)
select @结果