我有一个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