Как экспортировать столбец изображения в файлы в SQL Server?
13
Я буду мигрировать из базы данных. Есть один столбец типа, imageкоторый я хотел бы экспортировать в двоичные файлы в файловой системе. Один файл для каждой записи. Как я могу сделать это с SQL Server?
Я попробовал приведенный выше код, и он действительно работал ... в точку. По какой-то причине изображение JPG содержит 4 предшествующих символа, которые делают его недействительным. Я удалил их с помощью текстового редактора и вуаля ... JPG работал. Любая идея, что эти 4 символа могут быть и как избавиться от них в экспорте? Это:2B 90 01 00
Какой тип столбца вы экспортировали?
Макс Вернон
10
У меня была такая же проблема с дополнительными 4 байтами, добавляемыми в начало всех моих файлов. Вместо использования опции -N в моей команде bcp я изменил ее на -C RAW. Когда вы это сделаете, bcp будет предложено ответить на следующие вопросы:
Введите тип хранилища файлов в поле FileData [изображение]:
Введите префиксную длину поля FileData [4]:
Введите длину поля FileData [0]:
Введите терминатор поля [нет]:
Вы хотите сохранить информацию этого формата в файл? [Y / N]
Чтобы исправить это, я создал текстовый файл (i.txt) в корне моего сервера sql, в котором были следующие строки для ответа на каждый из них:
я
0
0
N
Затем моя линия EXEC bcp стала:
EXEC master..xp_cmdshell 'BCP "SELECT column_of_type_image FROM ** your_db WHERE id = 1" запрос "C: \ exportdir \ yourfile.pdf" -T -C RAW <C: \ i.txt'
Это экспортировал мой файл без каких-либо дополнительных символов.
Если у вас нет проблем с решением с графическим интерфейсом, есть действительно хорошая надстройка для SSMS SSMSBoost, которая предоставляет множество полезных функций и, конечно, самый простой способ предварительного просмотра изображений, хранящихся в SQL (по крайней мере, на мой взгляд)
ПРИМЕЧАНИЕ . После установки этой надстройки необходимо перезапустить SSMS.
Установите его и наслаждайтесь предварительным просмотром изображений только с помощью: RightClick> Visualize As> Picture
На некоторых серверах xp_cmdshell отключен, и вы получаетеSQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', search for 'xp_cmdshell' in SQL Server Books Online.
JustAMartin
-2
USE[POC]DECLARE@outPutPath varchar(50)='C:\Extract_Photos',@i bigint
,@init int
,@data varbinary(max),@fPath varchar(max),@folderPath varchar(max)--Get Data into temp Table variable so that we can iterate over itDECLARE@Doctable TABLE(id int identity(1,1),[Doc_Num] varchar(100),[FileName] varchar(100),[Doc_Content] varBinary(max))INSERTINTO@Doctable([Doc_Num],[FileName],[Doc_Content])Select[STUDENTNO],[STUDENTNAME],[STUDENTPHOTO]FROM[dbo].[STUDENTPHOTOS]--SELECT * FROM @tableSELECT@i = COUNT(1)FROM@Doctable
WHILE@i >=1BEGINSELECT@data =[Doc_Content],@fPath =@outPutPath +'\'+ [Doc_Num] + '\' +[FileName],
@folderPath = @outPutPath + '\'+ [Doc_Num]
FROM @Doctable WHERE id = @i
--Create folder first
EXEC [dbo].[CreateFolder] @folderPath
EXEC sp_OACreate 'ADODB.Stream', @init OUTPUT; -- An instace created
EXEC sp_OASetProperty @init, 'Type', 1;
EXEC sp_OAMethod @init, 'Open'; -- Calling a method
EXEC sp_OAMethod @init, 'Write', NULL, @data; -- Calling a method
EXEC sp_OAMethod @init, 'SaveToFile', NULL, @fPath, 2; -- Calling a method
EXEC sp_OAMethod @init, 'Close'; -- Calling a method
EXEC sp_OADestroy @init; -- Closed the resources
print 'Document Generated at -'+@fPath
--Reset the variables for next useSELECT@data =NULL,@init =NULL,@fPath =NULL,@folderPath =NULLSET@i -=1END
Пожалуйста, измените ваш пост, объяснив, что этот код должен делать.
Dezso
Спасибо Erax за сценарий, он работал чудесно. PS: сценарий не может извлечь файл, если запущен удаленно с использованием SSMS. Это должно было быть запущено на SQLServer непосредственно для того, чтобы вытащить вложение.
Ответы:
Это решение, которое я придумал:
Включить
xp_cmdshell
сПри необходимости создайте каталог,
xp_cmdshell
чтобы получить необходимые разрешения.Используйте BCP с запросом
** your_db должно быть полным именем таблицы, т. е. [Yourdb]. [YourSchema]. [YourTable]
источник
2B 90 01 00
У меня была такая же проблема с дополнительными 4 байтами, добавляемыми в начало всех моих файлов. Вместо использования опции -N в моей команде bcp я изменил ее на -C RAW. Когда вы это сделаете, bcp будет предложено ответить на следующие вопросы:
Чтобы исправить это, я создал текстовый файл (i.txt) в корне моего сервера sql, в котором были следующие строки для ответа на каждый из них:
Затем моя линия EXEC bcp стала:
Это экспортировал мой файл без каких-либо дополнительных символов.
источник
Я искал решение для экспорта столбца IMAGE, в котором хранятся файлы разных типов (pdf, xls, doc, xml ...), которые я хочу экспортировать.
Подход в ответе работал только для PDF-файлов. Чтобы экспортировать все виды файлов, мне пришлось настроить решение следующим образом:
(1.) Создайте файл шаблона формата:
(2.) Откройте созданный файл формата экспорта и отредактируйте его следующим образом:
Затем выполните команду экспорта:
(3.) Если вы столкнулись с этой ошибкой (как я):
убедитесь в следующем:
После этого выполняется экспорт любого слова из файла IMAGE Column без ошибок.
Дани за 1. и 2. все идет к ответу на следующий вопрос: /programming/1366544/how-to-export-image-field-to-file/24006947#24006947
источник
Если у вас нет проблем с решением с графическим интерфейсом, есть действительно хорошая надстройка для SSMS SSMSBoost, которая предоставляет множество полезных функций и, конечно, самый простой способ предварительного просмотра изображений, хранящихся в SQL (по крайней мере, на мой взгляд)
ПРИМЕЧАНИЕ . После установки этой надстройки необходимо перезапустить SSMS.
Установите его и наслаждайтесь предварительным просмотром изображений только с помощью: RightClick> Visualize As> Picture
источник
Держите команду на ОДНОЙ ЛИНИИ - ЕДИНАЯ ЛИНИЯ !!!
источник
SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', search for 'xp_cmdshell' in SQL Server Books Online.
источник