2012-01-04 14 views
0

私は、そのファイル同じバイト数を取得する私は、ファイルをアップロードし、2005年BLOBに挿入されたSQL Server 2005のファイルの整合性をチェックする方法 - varbinary(max)?

SQL Server内のvarbinary列にアップロードされたファイルのチェックをしようと

SELECT DATALENGTH(thefile) FROM table 

を使用しています持っている。

CHECKSUMは良い方法ではなく、HASHBYTESは最初の8000バイトしか取らず、私のファイルはそれ以上に優れています。

私はT-SQLしか使用できません。

ヒントを教えてください。

どうもありがとう:)

答えて

2

あなたは、ハッシュ上でハッシュを使用することができ、それはシングルパスハッシュと同じ強度を有している:もちろん

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

これは悪い考えではありません...試してみましょう! –

+0

試しましたか?人々に使いやすさを知らせてください。 –

+0

md5などのmd5の修正や再帰的なmd5などのアイデアを使用します。ファイルには9MBの長さがあるためです。しかし、ユーザビリティを考えれば、この値をチェックして、自分のアプリケーションなしでファイルがうまくダウンロードされているかどうかを知ることはできません。私はまだ運がない別の答えを探していた。 –

関連する問題