我有一个很大的nvarchar我希望传递给HashBytes函数.我收到错误:
"字符串或二进制文件将被截断.无法将值NULL插入列'colname',tbale'table';列不允许空值.UPDATE失败.语句已终止."
由于资源丰富,我发现这是由于HashBytes函数的最大限制为8000字节.进一步搜索向我展示了一个"解决方案",我的大型varchar将被分开并单独进行散列,然后再与此用户定义的函数结合使用:
function [dbo].[udfLargeHashTable] (@algorithm nvarchar(4), @InputDataString varchar(MAX))
RETURNS varbinary(MAX)
AS
BEGIN
DECLARE
@Index int,
@InputDataLength int,
@ReturnSum varbinary(max),
@InputData varbinary(max)
SET @ReturnSum = 0
SET @Index = 1
SET @InputData = convert(binary,@InputDataString)
SET @InputDataLength = DATALENGTH(@InputData)
WHILE @Index <= @InputDataLength
BEGIN
SET @ReturnSum = @ReturnSum + HASHBYTES(@algorithm, SUBSTRING(@InputData, @Index, 8000))
SET @Index = @Index + 8000
END
RETURN @ReturnSum
END
Run Code Online (Sandbox Code Playgroud)
我打电话给:
set @ReportDefinitionHash=convert(int,dbo.[udfLargeHashTable]('SHA1',@ReportDefinitionForLookup))
Run Code Online (Sandbox Code Playgroud)
其中@ReportDefinitionHash是int,而@ReportDefinitionForLookup是varchar
传递像'test'这样的简单char会产生与我的UDF不同的int,而不是对HashBytes的正常调用.
关于这个问题的任何建议?