我试图做一个文件上传到一个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)
当然,您可以修改函数以返回已经最终通过的散列