如何检查一个文件的完整性在SQL Server 2005插入到BLOB - varbinary(最大)



我试图做一个文件上传到一个varbinary列在SQL Server 2005检查。

我上传了文件并使用

SELECT DATALENGTH(thefile) FROM table

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

CHECKSUM不是更好的方法,HASHBYTES只占用前8000字节,而我的文件比这更伟大。

我只能使用T-SQL

任何提示都会有帮助的。

你可以使用hash over hash,它与单遍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)

当然,您可以修改函数以返回已经最终通过的散列

最新更新