【问题标题】:Export multiple images from image column从图像列导出多个图像
【发布时间】:2017-10-10 11:09:01
【问题描述】:

我有以下存储过程,如何修改它以一次导出多个图像? TicketID 可以包含多个图像,IN 语句可以在这里工作吗?感谢所有答案!

 CREATE PROCEDURE dbo.ExportImage (
 @ImgName NVARCHAR (100)
,@ImageFolderPath NVARCHAR(1000)
,@Filename NVARCHAR(1000)
)
AS
BEGIN

   DECLARE @ImageData VARBINARY (max);
   DECLARE @Path2OutFile NVARCHAR (2000);
   DECLARE @Obj INT

   SET NOCOUNT ON

   SELECT @ImageData = (
     SELECT convert (VARBINARY (max), ImgData, 1)
     FROM Images
     WHERE TicketID = @ImgName
     );

   SET @Path2OutFile = CONCAT (
     @ImageFolderPath
     ,'\'
     , @Filename
     );
 BEGIN TRY
 EXEC sp_OACreate 'ADODB.Stream' ,@Obj OUTPUT;
 EXEC sp_OASetProperty @Obj ,'Type',1;
 EXEC sp_OAMethod @Obj,'Open';
 EXEC sp_OAMethod @Obj,'Write', NULL, @ImageData;
 EXEC sp_OAMethod @Obj,'SaveToFile', NULL, @Path2OutFile, 2;
 EXEC sp_OAMethod @Obj,'Close';
 EXEC sp_OADestroy @Obj;
END TRY

BEGIN CATCH
EXEC sp_OADestroy @Obj;
END CATCH

SET NOCOUNT OFF
END

这是我执行的查询:
exec dbo.ExportImage '2042','C:\ExpImg','2042.jpg'

错误消息:

子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。

【问题讨论】:

    标签: sql .net sql-server


    【解决方案1】:

    类似的东西:

    CREATE PROCEDURE dbo.ExportImage (
     @ImgName NVARCHAR (100)
    ,@ImageFolderPath NVARCHAR(1000)
    ,@Filename NVARCHAR(1000)
    )
    AS
    BEGIN
    
       DECLARE @ImageData VARBINARY (max);
       DECLARE @Path2OutFile NVARCHAR (2000);
       DECLARE @Obj INT
    
       SET NOCOUNT ON
    
    DECLARE @cursor CURSOR
    SET @cursor = CURSOR FOR
        SELECT convert (VARBINARY (max), ImgData, 1)
         FROM Images
         WHERE TicketID = @ImgName
    OPEN @cursor
    FETCH NEXT
    FROM @cursor INTO @ImageData
    WHILE @@FETCH_STATUS = 0
    BEGIN
       SET @Path2OutFile = CONCAT (
         @ImageFolderPath
         ,'\'
         , @Filename
         );
     BEGIN TRY
     EXEC sp_OACreate 'ADODB.Stream' ,@Obj OUTPUT;
     EXEC sp_OASetProperty @Obj ,'Type',1;
     EXEC sp_OAMethod @Obj,'Open';
     EXEC sp_OAMethod @Obj,'Write', NULL, @ImageData;
     EXEC sp_OAMethod @Obj,'SaveToFile', NULL, @Path2OutFile, 2;
     EXEC sp_OAMethod @Obj,'Close';
     EXEC sp_OADestroy @Obj;
    END TRY
    
    BEGIN CATCH
    EXEC sp_OADestroy @Obj;
    END CATCH
    
    FETCH NEXT
    FROM @cursor INTO @ImageData
    END
    CLOSE @cursor
    DEALLOCATE @cursor
    
    END
    

    【讨论】:

    • 如果我运行它,我仍然只能导出一张图片 --exec dbo.ExportImage '2042','C:\ExpImage,'testexport.jpg' 我需要修改它吗?
    • 现在你没有错误。我认为您只获得 1 张图像的原因是您多次覆盖相同的图像,因为您总是使用相同的 @ImageFolderPath\@FileName
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 2020-07-08
    相关资源
    最近更新 更多