sql >> Databáze >  >> RDS >> Sqlserver

Skript pro uložení varbinárních dat na disk

Přístup BCP mi nefunguje. Byty, které zapisuje na disk, nelze deserializovat zpět do objektů .net, které jsem uložil. To znamená, že bajty na disku nejsou ekvivalentní tomu, co je uloženo. Možná BCP píše nějakou hlavičku. Nejsem si jistý.

Našel jsem následující kód zde ve spodní části článku. Funguje to skvěle! Ačkoli byl určen pro uložené obrázky BMP, funguje s jakýmkoli varbinary.

DECLARE @SQLIMG VARCHAR(MAX),
    @IMG_PATH VARBINARY(MAX),
    @TIMESTAMP VARCHAR(MAX),
    @ObjectToken INT

DECLARE IMGPATH CURSOR FAST_FORWARD FOR 
        SELECT csl_CompanyLogo from mlm_CSCompanySettingsLocalizations

OPEN IMGPATH 

FETCH NEXT FROM IMGPATH INTO @IMG_PATH 

WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @TIMESTAMP = 'd:\' + replace(replace(replace(replace(convert(varchar,getdate(),121),'-',''),':',''),'.',''),' ','') + '.bmp'

        PRINT @TIMESTAMP
        PRINT @SQLIMG

        EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
        EXEC sp_OASetProperty @ObjectToken, 'Type', 1
        EXEC sp_OAMethod @ObjectToken, 'Open'
        EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @IMG_PATH
        EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @TIMESTAMP, 2
        EXEC sp_OAMethod @ObjectToken, 'Close'
        EXEC sp_OADestroy @ObjectToken

        FETCH NEXT FROM IMGPATH INTO @IMG_PATH 
    END 

CLOSE IMGPATH
DEALLOCATE IMGPATH


  1. Jak zálohovat RAC VM

  2. Jak se připojit k MySQL pomocí PHP

  3. Jak používat DISTINCT v SQL

  4. 7 tipů osvědčených postupů pro hromadné načítání dat PostgreSQL