Извлечение образа SQL

Я пытаюсь извлечь изображения из восстановленной базы данных. Приведенный ниже сценарий якобы работает нормально: это означает, что он извлекает изображения и сохраняет количество файлов, которые я ожидаю увидеть (и размер, который я ожидаю увидеть) в сетевую папку в виде файлов .pdf. Однако, когда я пытаюсь открыть файлы, я получаю сообщение об ошибке:

Adobe Reader не смог открыть «имя_файла.pdf», потому что это либо неподдерживаемый тип файла, либо файл был поврежден (например, он был отправлен как вложение электронной почты и не был правильно декодирован).

  1. Я запускал этот скрипт раньше в других средах (точнее, в двух), и он работал нормально.
  2. Я убедился, что реальные изображения хороши. Вы можете получить доступ к файлам через внешний интерфейс.
  3. Не похоже, чтобы значения были зашифрованы. Хотя я не совсем уверен.
  4. Тип данных изначально: изображение
  5. Я использую SQL некоторое время, но считаю себя нубом, тогда как я в основном самоучка, так что, пожалуйста, полегче.

Любые рекомендации / предложения / идеи будут очень приветствоваться.

Спасибо.

--========================================================================

USE <<ENTER_DATABASENAME>>
GO
sp_configure 'show advanced options', 1
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1
GO
RECONFIGURE
GO
DECLARE @FILEID VARCHAR(12),
@IMAGE VARBINARY(MAX),
@OBJSTREAM INT, 
@FILENAME VARCHAR(MAX),
@BASEDIR VARCHAR(MAX)
SET @BASEDIR = '<<ENTER_NETWORKPATH>>'
PRINT 'BASEDIR: ' + @BASEDIR
DECLARE IMGEXTRACT CURSOR FAST_FORWARD FOR
select <<ENTER_COLUMNNAME01>>, <<ENTER_COLUMNNAME02>> 
from <<ENTER_TABLENAME>>

OPEN IMGEXTRACT
FETCH NEXT FROM IMGEXTRACT INTO @FILEID, @IMAGE
WHILE @@FETCH_STATUS = 0
BEGIN
SET @FILENAME = @BASEDIR + '\' + @FILEID + '.pdf'
PRINT @FILENAME
EXEC sp_OACreate 'ADODB.Stream', @OBJSTREAM OUTPUT
EXEC sp_OASetProperty @OBJSTREAM, 'Type', 1
EXEC sp_OAMethod @OBJSTREAM, 'Open'
EXEC sp_OAMethod @OBJSTREAM, 'Write', NULL, @IMAGE
EXEC sp_OAMethod @OBJSTREAM, 'SaveToFile', NULL, @FILENAME, 2
EXEC sp_OAMethod @OBJSTREAM, 'Close'
EXEC sp_OADestroy @OBJSTREAM
FETCH NEXT FROM IMGEXTRACT INTO @FILEID, @IMAGE
END
CLOSE IMGEXTRACT
DEALLOCATE IMGEXTRACT
GO

--========================================================================

person teknowcat    schedule 23.11.2016    source источник
comment
этот ответ может помочь stackoverflow.com/questions/30900442/   -  person Vamsi Prabhala    schedule 24.11.2016
comment
vkp - спасибо за ссылку! Как уже говорилось, весь мой SQL я изучаю самостоятельно. Я застрял на линии bcp и не совсем уверен, куда идти оттуда. Можете ли вы объяснить мне, как это работает в вашем сценарии?   -  person teknowcat    schedule 24.11.2016