2017-10-10 9 views
0

私は以下のストアドプロシージャを持っています。 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'

ERRORMSG:

サブクエリは複数の値を返しました。 =、!=、<、< =、>、> =、またはサブクエリが式として使用されている場合は、これは許可されません。

答えて

0

そのような何か:

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 
+0

私はこれを実行すると、私はまだ一つだけの画像がdbo.ExportImage '2042' --execエクスポートされます、 'C:\ ExpImage、' testexport.jpg」か私はこれを変更する必要がありますか? – wddg

+0

これでエラーは発生しません。私は、なぜあなたは1つの画像しか得られないのかという理由は、あなたがいつも同じ@ImageFolderPath \ @ FileNameに同じイメージを何度も上書きすることだと思います –

関連する問題