복붙노트

[SQL] 어떻게 파일에 이미지 필드를 내보내려면?

SQL

어떻게 파일에 이미지 필드를 내보내려면?

나는 데이터베이스에 연결하려면 Microsoft SQL Server Management Studio를 사용하고 있습니다. 그것에서 나는 파일 데이터를 포함하는 이미지 열이 하나 개의 컬럼있는 테이블을 가지고있다. 또 다른 열은 파일 이름을 포함하는 문자열입니다.

나는 내가 기록을 선택하고 파일에이 데이터를 기록 할 수 있도록 몇 가지 SQL 스크립트를 작성할 수있는 몇 가지 방법이 있나요? 이것이 가능하지 않은 경우 또는이를 달성하기위한 간단한 방법은 무엇인가?

나는이 관련 질문을 본 적이 있지만 꽤 같은 보이지 않는다 : SQL 서버 2000의 파일에 이미지 저장 열을

해결법

  1. ==============================

    1.

    -- Write all database images (jpg) to file.
    --------- --------- --------- --------- --------- --------- --------- 
    DECLARE CURSOR_ProductIds CURSOR FOR (SELECT ImgImagesId FROM ImgProductSample)
    
    DECLARE @ProductId INT;
    
    OPEN CURSOR_ProductIds
    
    FETCH NEXT FROM CURSOR_ProductIds INTO @ProductId
    WHILE (@@FETCH_STATUS <> -1)
    BEGIN
      DECLARE @ImageData varbinary(max);
      SELECT @ImageData = (SELECT convert(varbinary(max), ImageData, 1) FROM ProductImages WHERE Id = @ProductId);
    
      DECLARE @Path nvarchar(1024);
      SELECT @Path = 'C:\MyImages\Output';
    
      DECLARE @Filename NVARCHAR(1024);
      SELECT @Filename = (SELECT ImageFilename FROM ProductImages WHERE id = @ProductId);
    
      DECLARE @FullPathToOutputFile NVARCHAR(2048);
      SELECT @FullPathToOutputFile = @Path + '\' + @Filename;
    
      DECLARE @ObjectToken INT
      EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT;
      EXEC sp_OASetProperty @ObjectToken, 'Type', 1;
      EXEC sp_OAMethod @ObjectToken, 'Open';
      EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @ImageData;
      EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @FullPathToOutputFile, 2;
      EXEC sp_OAMethod @ObjectToken, 'Close';
      EXEC sp_OADestroy @ObjectToken;
    
      FETCH NEXT FROM CURSOR_ProductIds INTO @ProductId
    END
    CLOSE CURSOR_ProductIds
    DEALLOCATE CURSOR_ProductIds
    
    -- Make sure the following statement is executed to enable file IO
    -- From http://msdn.microsoft.com/en-us/library/ms191188.aspx
    --------- --------- --------- --------- --------- --------- --------- 
    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    sp_configure 'Ole Automation Procedures', 1;
    GO
    RECONFIGURE;
    GO
    
  2. ==============================

    2.CodeProject의에서 mkader에서 :

    CodeProject의에서 mkader에서 :

    EXEC sp_configure 'show advanced options', 1;  
    GO  
    RECONFIGURE;  
    GO
    EXEC sp_configure 'xp_cmdshell',1  
    GO  
    RECONFIGURE;  
    GO
    

    그런 다음 서식 파일을 덤프 :

    Declare @sql varchar(500)
    SET @sql = 'bcp DBName.dbo.tblTableName format nul -T -n -f C:\testblob.fmt -S ' + @@SERVERNAME
    select @sql 
    EXEC master.dbo.xp_CmdShell @sql 
    

    내 서식 파일은 다음과 같이 보았다 :

    10.0
    12
    1       SQLINT              0       4       ""   1     my_tablecol_id                                  ""
    2       SQLINT              1       4       ""   2     my_tablecol0                                   ""
    3       SQLCHAR             2       256     ""   3     my_tablecol1                                SQL_Latin1_General_CP1_CI_AS
    4       SQLCHAR             2       256     ""   4     my_tablecol2                                SQL_Latin1_General_CP1_CI_AS
    5       SQLCHAR             2       256     ""   5     my_tablecol3                         SQL_Latin1_General_CP1_CI_AS
    6       SQLCHAR             2       2048    ""   6     my_tablecol4                                SQL_Latin1_General_CP1_CI_AS
    7       SQLIMAGE            4       0       ""   7     my_imagecol                                     ""
    8       SQLCHAR             2       2048    ""   8     my_tablecol6                            SQL_Latin1_General_CP1_CI_AS
    9       SQLINT              1       4       ""   9     my_tablecol7                                      ""
    10      SQLINT              1       4       ""   10    my_tablecol8                                    ""
    11      SQLINT              1       4       ""   11    my_tablecol9                               ""
    12      SQLBIT              1       1       ""   12    my_tablecol10                             ""
    

    나는 다음과 같이 형식 파일을 편집 :

    10.0
    1
    1       SQLIMAGE            0       0       ""   1     my_imagecol                                     ""
    

    그리고 SSMS에서이 SQL을 실행 :

    Declare @mynum int
    Declare @sql varchar(500)
    SET @mynum = 49 -- something meaningful only to me
    SET @sql = 'BCP "SELECT my_imagecol FROM DBName.dbo.tblTableName where my_tablecol_id=@mynum" QUERYOUT C:\myfilename.docx -T -fC:\testblob.fmt -S ' + @@SERVERNAME
    EXEC master.dbo.xp_CmdShell @sql
    

    이 이미지 열 작품, 정말 잘 모든 종류의 데이터를했다.

  3. ==============================

    3.

    -- Write database image (jpg) to file
    -- http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=101754
    --------- --------- --------- --------- --------- --------- --------- 
    DECLARE @ImageData varbinary(max);
    SELECT @ImageData = (SELECT convert(varbinary(max), ImageData, 1) FROM ProductImages WHERE Id = 1);
    
    DECLARE @Path nvarchar(1024);
    SELECT @Path = 'C:\MyImages\Output';
    
    DECLARE @Filename NVARCHAR(1024);
    SELECT @Filename = (SELECT ImageFilename FROM ProductImages WHERE id = 1);
    
    DECLARE @FullPathToOutputFile NVARCHAR(2048);
    SELECT @FullPathToOutputFile = @Path + '\' + @Filename;
    
    DECLARE @ObjectToken INT
    EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT;
    EXEC sp_OASetProperty @ObjectToken, 'Type', 1;
    EXEC sp_OAMethod @ObjectToken, 'Open';
    EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @ImageData;
    EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @FullPathToOutputFile, 2;
    EXEC sp_OAMethod @ObjectToken, 'Close';
    EXEC sp_OADestroy @ObjectToken;
    
    -- Make sure the following statement is executed to enable file IO
    -- From http://msdn.microsoft.com/en-us/library/ms191188.aspx
    --------- --------- --------- --------- --------- --------- --------- 
    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    sp_configure 'Ole Automation Procedures', 1;
    GO
    RECONFIGURE;
    GO
    

    PS - 나는 그것이 잘못된 이미지 파일을 제작 작업 코드의 조각을 얻었다 후 'T-SQL을 사용하여 SQL Server의 파일 읽기 및 쓰기'기사에 대한 링크는 유용하지만.

  4. ==============================

    4.나는 아직도 누군가를 도울 수 있기 때문에, 게시하고 싶어,이 2 세 스레드 이상 알고있다. 우리는 그들이 다른 SQL 서버로 가져올 수 있습니다 그래서, 파일에 대한 데이터베이스 테이블에서 다른 열 (문자 포함)과 함께 이미지를 내보내려면이 매우 편리합니다.

    나는 아직도 누군가를 도울 수 있기 때문에, 게시하고 싶어,이 2 세 스레드 이상 알고있다. 우리는 그들이 다른 SQL 서버로 가져올 수 있습니다 그래서, 파일에 대한 데이터베이스 테이블에서 다른 열 (문자 포함)과 함께 이미지를 내보내려면이 매우 편리합니다.

    아래의 코드는 선택의 파일 경로에 지정된 데이터베이스 테이블을 내 보냅니다.

    Declare @sql varchar(500)
    SET @sql = 'bcp Your_db.Your_table out Your_File_Path(eg: C:\ImagesNames.Dat) -w -T -S ' + @@SERVERNAME
    EXEC @sql
    

    -w 옵션은 유니 코드 형식의 데이터 파일이며, 우리가 구분 기호를 지정하지 않은 경우 구분 기호는 기본 탭 구분 기호를 할 것이다. 이 경우, 데이터 파일은 DAT 확장자로 저장됩니다. 어쩌면 그것은뿐만 아니라 다른 형식으로 저장 될 수 있지만,이 하나가 완벽하게 작동하는 반면 나는 그것을 테스트하지 않았습니다.

    https://msdn.microsoft.com/en-gb/library/ms188289(v=sql.110).aspx

    그런 다음 가져 오기 :

    BULK INSERT Your_db.Your_table
       FROM 'Your_File_Path'
    with (DATAFILETYPE='widechar')
    

    이 수입은 데이터가 지정된 데이터베이스 테이블에 매우 효율적으로 파일.

  5. from https://stackoverflow.com/questions/1366544/how-to-export-image-field-to-file by cc-by-sa and MIT license