Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tập lệnh để lưu dữ liệu varbinary vào đĩa

Cách tiếp cận BCP không phù hợp với tôi. Các byte mà nó ghi vào đĩa không thể được giải mã hóa trở lại các đối tượng .net mà tôi đã lưu trữ. Điều này có nghĩa là các byte trên đĩa không tương đương với những gì được lưu trữ. Có lẽ BCP đang viết một số loại tiêu đề. Tôi không chắc.

Tôi tìm thấy mã sau đây ở cuối bài viết. Nó hoạt động tuyệt vời! Mặc dù nó được thiết kế cho các hình ảnh BMP được lưu trữ, nhưng nó hoạt động với bất kỳ varbinary nào.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm IndexOf trong T-SQL

  2. Hiệu suất SQL Server IN so với EXISTS

  3. SQL đệ quy CTE:Tìm các đối tượng được liên kết bởi thuộc tính

  4. Lấy tên ngày ngắn trong SQL Server (T-SQL)

  5. Làm cách nào để sao chép sâu một tập dữ liệu và thay đổi các tham chiếu FK để trỏ đến tất cả các bản sao?