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

问题描述:

我试图在SQL Server上传到varbinary列文件做了检查2005年如何检查SQL Server 2005中插入BLOB的文件的完整性 - varbinary(max)?

我上传的文件,并使用

SELECT DATALENGTH(thefile) FROM table 

我得到了相同的字节数,文件具有。

CHECKSUM不是更好的方法,HASHBYTES只需要第一个8000字节,我的文件比这更好。

我只能使用T-SQL。

任何提示将有所帮助。

感谢很多:)

您可以使用在哈希散列,它具有相同的强度单通哈希:

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) 

当然你也可以修改函数返回已经final-传递哈希

+0

这不是一个坏主意......让我试试! – 2012-01-04 13:20:09

+0

试过了吗?让人们知道它的可用性 – 2012-01-04 14:12:52

+0

我使用md5等md5的修改和递归md5的想法,因为该文件有9MB的长度。但考虑到可用性,用户不能检查这个值来知道没有我自己的应用程序的情况下文件是否可以下载。我正在寻找另一个没有运气的答案。 – 2012-01-04 16:48:50