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