我正在尝试检查上传到SQL Server 2005中varbinary
列的文件。
我上传了文件并使用
SELECT DATALENGTH(thefile) FROM table
我获得与文件相同的字节数。
CHECKSUM不是更好的方式,HASHBYTES
只占用前8000个字节,而且我的文件比这更好。
我只能使用T-SQL。
任何提示都会有所帮助。
非常感谢:)
答案 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)
当然你可以修改返回已经最终传递哈希的函数