Как получить blob из бд 1c средствами sql?

У меня есть бд sql и меня интересует как получить данные(файлы pdf, docx, tif...) из колонок формата Image? Вообще задача сконвертировать в varbinary и положить в другую бд, но я начал из далека, попытался в лоб выгрузить данные на диск:

  DECLARE @bcpCommand nvarchar(4000)
  declare @FileName nvarchar(4000) = N'd:\temp1.pdf'
  SET @bcpCommand = 'bcp "SELECT [_Fld3351] FROM [mydb].[dbo].[_InfoRg3349] WHERE<>" queryout "' + @FileName + '" -T -c'
EXEC master..xp_cmdshell @bcpCommand

Но все файлы оказались битые. Тут вот нашел упоминание, что нужно обрезать начало. Так что попробовал обрезать:

SELECT substring(convert(varbinary(max),[_Fld3351]),11,DATALENGTH([_Fld3351]))

Но получаемые файлы все еще повреждены.

Что я делаю не так? Или с файлами из 1c нужно вообще иначе обращаться?

UPDATE

Я не понимаю, что происходит, но когда я выгрузил файл на диск вот таким способом, то получившийся файл прекрасно открылся.

declare @x varbinary(max)
declare @xz varbinary(max)
declare  @OLEStream Int, @ErrCode   Int
declare @FileName nvarchar(4000) = N'd:\temp1.pdf'

set @x =(SELECT [_Fld3351] FROM [mydb].[dbo].[_InfoRg3349] WHERE<> )



exec @ErrCode = sys.sp_OACreate 'ADODB.Stream' ,@OLEStream OUT

exec @ErrCode = sys.sp_OASetProperty @OLEStream , 'CharSet' ,'utf-8'
exec @ErrCode = sys.sp_OASetProperty @OLEStream ,'Type' , 1
exec @ErrCode = sys.sp_OAMethod @OLEStream ,'Open'
exec @ErrCode = sys.sp_OAMethod @OLEStream ,'Write', null, @x


EXEC @ErrCode = sp_OAMethod @OLEStream,'SaveToFile',null, @FileName,2 
EXEC @ErrCode = sp_OAMethod @OLEStream,'Close' 

Но я мало знаком с этими командами, как мне сделать. что бы сохранение шло не на диск на в таблицу?


Ответы (0 шт):