Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak zrzucić wszystkie nasze obrazy z pola VARBINARY(MAX) w SQL Server 2008 do systemu plików?

Rozgryzłem to dzięki tym post ...

SET NOCOUNT ON

DECLARE @IdThumbnail INTEGER,
        @MimeType VARCHAR(100),
        @FileName VARCHAR(200),
        @Sqlstmt varchar(4000)


DECLARE Cursor_Image CURSOR FOR
    SELECT a.IdThumbnail
    FROM tblThumbnail a
    ORDER BY a.IdThumbnail

OPEN Cursor_Image
    FETCH NEXT FROM Cursor_Image INTO @IdThumbnail

    WHILE @@FETCH_STATUS = 0
    BEGIN

        -- Generate the file name based upon the ID and the MIMETYPE.
        SELECT @FileName = LTRIM(STR(@IdThumbnail)) + '.png'

        -- Framing DynamicSQL for XP_CMDshell            
        SET @Sqlstmt='BCP "SELECT OriginalImage 
                      FROM Appian.dbo.tblThumbnail 
                      WHERE IdThumbnail = ' + LTRIM(STR(@IdThumbnail)) +
                      '" QUERYOUT c:\Temp\Images\' + LTRIM(@FileName) + 
                      ' -T -fC:\Temp\ImageFormatFile.txt'
        print @FileName
        print @sqlstmt

        EXEC xp_cmdshell @sqlstmt
        FETCH NEXT FROM Cursor_Image INTO @IdThumbnail
    END

CLOSE Cursor_Image
DEALLOCATE Cursor_Image

Uwaga -> musisz mieć plik formatu dla polecenia BCP. To jest zawartość pliku i umieściłem go w c:\Temp (jak zaznaczono w wierszu poleceń BCP powyżej).

10.0
1
1       SQLIMAGE            0       0       ""   1     OriginalImage                      ""

Ostatnia uwaga na temat tego pliku formatu.. tam MUSI BYĆ NOWA LINIA PO OSTATNIEJ LINII. w przeciwnym razie pojawi się błąd.

Ciesz się!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Muszę przekazać nazwy kolumn za pomocą zmiennej w instrukcji select w procedurze sklepu, ale nie mogę użyć dynamicznego zapytania

  2. masz problemy z przywróceniem zaszyfrowanej bazy danych

  3. SqlDateTime.MinValue !=DateTime.MinValue, dlaczego?

  4. Instrukcja SQL try-catch nie obsługuje błędu (SQL Server 2008)

  5. Jak sumować rachunki według długości kodu rachunku?