如何检查插入到BLOB中的SQL Server 2005中的文件的完整性 - varbinary(max)?

时间:2012-01-04 13:06:20

标签: sql sql-server-2005 file crc varbinary

我正在尝试检查上传到SQL Server 2005中varbinary列的文件。

我上传了文件并使用

SELECT DATALENGTH(thefile) FROM table

我获得与文件相同的字节数。

CHECKSUM不是更好的方式,HASHBYTES只占用前8000个字节,而且我的文件比这更好。

我只能使用T-SQL。

任何提示都会有所帮助。

非常感谢:)

1 个答案:

答案 0 :(得分:2)

您可以使用hash over hash,它具有与单遍哈希相同的强度:

CREATE FUNCTION dbo.GetMyLongHash(@data VARBINARY(MAX))
RETURNS VARBINARY(MAX)
WITH RETURNS NULL ON NULL INPUT
AS
BEGIN
    DECLARE @res VARBINARY(MAX) = 0x
    DECLARE @position INT = 1, @len INT = DATALENGTH(@data)

    WHILE 1 = 1
    BEGIN
        SET @res = @res + HASHBYTES('MD5', SUBSTRING(@data, @position, 8000))
        SET @position = @position+8000
        IF @Position > @len 
          BREAK
    END
    RETURN @res
END
GO

declare @theHash varbinary(max)

select @theHash = dbo.GetMyLongHash(thefile) from table

WHILE DATALENGTH(@thehash) > 16 SET @TheHash = dbo.GetMyLongHash(@theHash)

当然你可以修改返回已经最终传递哈希的函数