导出图像MSSQL时使用Column值作为foldername

时间:2015-12-30 01:25:54

标签: sql sql-server

使用MSSQL导出图像时,有没有办法将列值指定为新的文件夹名称?

例如,我有一个名为ReportID的字段,我希望在我已创建的" images"中创建一个文件夹。文件夹,如果它不存在,(多个记录可以保存相同的ReportID)。

我的脚本如下:(正在写入正确的文件路径,但没有保存图像,我认为它没有正确创建文件夹)

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO

DECLARE @file int,
    @FilePath varchar(80),
    @hr INT,
    @FK_ReferenceID INT,
    @FK_FieldID INT,
    @Value VARBINARY(MAX),
    @Extension varchar(4),
    @ReportID INT;
DECLARE imgs CURSOR 
FOR SELECT FK_ReferenceID, FK_FieldID, Value, Extension, ReportID FROM     dbo.ImageValues
FOR UPDATE OF FilePath;

OPEN imgs;  
FETCH NEXT FROM imgs INTO @FK_ReferenceID, @FK_FieldID, @Value, @Extension, @ReportID;
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @FilePath = 'E:\Reports\images\' +  CAST(@ReportID AS VARCHAR(10)) + '\'  + CAST(@FK_ReferenceID AS VARCHAR(10)) + '-f' + CAST(@FK_FieldID AS VARCHAR(10)) + '.' + CAST(@Extension AS VARCHAR(4));

EXEC sp_OACreate 'ADODB.Stream', @file OUT;
EXEC sp_OASetProperty @file, 'Type', 1;
EXEC sp_OAMethod @file, 'Open';
EXEC sp_OAMethod @file, 'Write', NULL, @Value;
EXEC sp_OAMethod @file, 'SaveToFile', NULL, @FilePath, 2;
EXEC sp_OAMethod @file, 'Close';
EXEC sp_OADestroy @file;

UPDATE dbo.ImageValues SET FilePath = @FilePath WHERE CURRENT OF imgs;

FETCH NEXT FROM imgs INTO @FK_ReferenceID, @FK_FieldID, @Value, @Extension, @ReportID;
END
CLOSE imgs;
DEALLOCATE imgs;
GO

sp_configure 'Ole Automation Procedures', 0;
GO
RECONFIGURE;
GO

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是将其分为两个步骤,(1)首先创建文件夹,然后(2)然后创建文件。您需要在两个步骤中检查异常,如果该文件夹已存在的异常,您将在第一步中忽略。或者,您可以先检查文件夹是否存在,然后创建它,然后再创建文件。据我所知,SQL自动不会为你做这样的检查。