将数字图像从SQL Server 2012转换为物理图像

时间:2016-02-18 11:10:36

标签: sql-server

我有一个Image表,其中包含SQL Server 2012数据库中的大约50000个图像。现在我需要将所有图像从数据库迁移到指定文件夹中的物理图像。

我使用下面显示的代码来迁移图像,但只有12000张图像被转换为​​清晰格式,其他图像都被扭曲模糊或不清晰。问题是,当我们从使用的软件看到这个图像是非常清晰和完美的。所以请任何人帮助我如何将二进制图像迁移到物理图像,就像从使用的软件中看到的那样。

请查看我使用过的SQL代码:

DECLARE 
    @FileContent VARBINARY(MAX),
    @FileName VARCHAR(MAX),
    @ObjectToken INT,
    @FileID VARCHAR(MAX),
    @IsApproved VARCHAR(2),
    @PicT VARCHAR(1)

DECLARE cFiles CURSOR FAST_FORWARD FOR
    SELECT I.Code, I.Name, Image, IsApproved, PicType 
    FROM ImageTable I

OPEN cFiles

FETCH NEXT FROM cFiles 
      INTO @FileID, @FileName, @FileContent,@IsApproved, @PicT

WHILE @@FETCH_STATUS = 0 
BEGIN
    -- CHOOSE 1 of these SET statements:

    -- if FileName is unique, then just remove special characters
    SET @FileName = REPLACE(REPLACE(@FileName, '\', ' '), ':', ' ')

    -- if FileName without path information is unique
    SET @FileName = SUBSTRING(@FileName,
        len(@FileName)+2-CHARINDEX('\',REVERSE(@FileName)),len(@FileName))

    -- if you just take ID + extensions
    SET @FileName = CASE WHEN @PicT ='J' THEN 'D:\IMAGE\' + CAST(@FileID AS varchar) + '.jpg'
                   WHEN @PicT='B' THEN 'D:\IMAGE\' + CAST(@FileID AS varchar) + '.bmp'
                    END

    EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
    EXEC sp_OASetProperty @ObjectToken, 'Type', 1
    EXEC sp_OAMethod @ObjectToken, 'Open'
    EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @FileContent
    EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @FileName, 2
    EXEC sp_OAMethod @ObjectToken, 'Close'
    EXEC sp_OADestroy @ObjectToken

    FETCH NEXT FROM cFiles 
          INTO @FileID, @FileName, @FileContent, @IsApproved, @PicT
END

CLOSE cFiles
DEALLOCATE cFiles

0 个答案:

没有答案