sql >> データベース >  >> RDS >> Sqlserver

バイナリデータをディスクに保存するスクリプト

    BCPアプローチは私にはうまくいきません。ディスクに書き込んだバイトを逆シリアル化して、保存した.netオブジェクトに戻すことはできません。これは、ディスク上のバイトが保存されているバイトと同等ではないことを意味します。おそらく、BCPはある種のヘッダーを書いています。わからない。

    記事の下部に次のコードがあります。それは素晴らしい働きをします!保存されたBMP画像を対象としていますが、どの変数でも機能します。

    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. JSON_TYPE()–MySQLでJSON値のタイプを取得します

    2. Coalesce()がSQLiteでどのように機能するか

    3. selectステートメントで日時列をUTCから現地時間に変換します

    4. データベースへのすべての接続を強制終了するスクリプト(RESTRICTED_USER ROLLBACK以上)