如何检查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-传递哈希
这不是一个坏主意......让我试试! – 2012-01-04 13:20:09
试过了吗?让人们知道它的可用性 – 2012-01-04 14:12:52
我使用md5等md5的修改和递归md5的想法,因为该文件有9MB的长度。但考虑到可用性,用户不能检查这个值来知道没有我自己的应用程序的情况下文件是否可以下载。我正在寻找另一个没有运气的答案。 – 2012-01-04 16:48:50