Как получить 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'
Но я мало знаком с этими командами, как мне сделать. что бы сохранение шло не на диск на в таблицу?