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