相关疑难解决方法(0)

SQL Server 2008和HashBytes

我有一个很大的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的正常调用.

关于这个问题的任何建议?

hash sqlclr user-defined-functions sql-server-2008

12
推荐指数
3
解决办法
1万
查看次数