sql >> Databasteknik >  >> RDS >> Sqlserver

Skript för att spara varbinära data på disken

BCP-metoden fungerar inte för mig. Byten som den skriver till disk kan inte deserialiseras tillbaka till .net-objekten jag lagrade. Det betyder att byten på disken inte är likvärdiga med det som lagras. BCP kanske skriver någon form av header. Jag är inte säker.

Jag hittade följande kod här längst ner i artikeln. Det fungerar jättebra! Även om den var avsedd för lagrade BMP-bilder, fungerar den med alla varianter.

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. Introduktion till Firebase

  2. Lås för SELECT så att en annan process inte får gamla data

  3. MySQL-replikering för hög tillgänglighet

  4. Jag glömde lösenordet som jag angav under postgres-installationen