sql >> Database >  >> RDS >> Sqlserver

Hoe al onze afbeeldingen van een VARBINARY(MAX)-veld in SQL Server 2008 naar het bestandssysteem te dumpen?

Ik ben erachter gekomen dankzij dit posten ...

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

Let op -> u heeft een formaatbestand nodig voor het BCP-commando. Dit is de inhoud van het bestand en ik heb het in c:\Temp geplaatst (zoals vermeld in de BCP-opdrachtregel hierboven).

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

Laatste opmerking over dat bestandsformaat.. er MOET EEN NIEUWE LIJN NA DE LAATSTE REGEL ZIJN. anders krijg je een foutmelding.

Geniet ervan!



  1. In plaats van LIKE en ~, waarom werkt alleen VERGELIJKBAAR MET als regex-match met alternatieven wordt uitgevoerd?

  2. Kan het zuiden (voor Django) rijen met gegevens in de database invoegen?

  3. Controleer of RPC Out is ingeschakeld op een gekoppelde server

  4. MySQL - GROUP meerdere rijen met behoud van verschillen