Как проверить целостность файла в SQL Server 2005, вставленного в большой двоичный объект - varbinary (max)? - PullRequest
0 голосов
/ 04 января 2012

Я пытаюсь проверить файл, загруженный в столбец varbinary в SQL Server 2005.

Я загрузил файл и, используя

SELECT DATALENGTH(thefile) FROM table

, получаюто же количество байтов, что и у файла.

CHECKSUM - не лучший способ, а HASHBYTES занимает только первые 8000 байтов, и мои файлы настолько превосходнее.используйте только T-SQL.

Любой совет будет полезен.

Большое спасибо:)

1 Ответ

2 голосов
/ 04 января 2012

Вы можете использовать хеш над хешем, он имеет ту же силу, что и однопроходный хеш:

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)

Конечно, вы можете изменить функцию для возврата уже окончательного хэша

...