Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как получить файл(JPG) из поля Image  [new]
abrashka
Member

Откуда:
Сообщений: 517
День добрый!
Получили старую базу, в которой есть таблица Customer с полем Picture image null.
Хотелось бы верить, что там действительно хранится фото клиента.

Пытаюсь экспортировать image в JPG, но полученный файл не открывается в графическом редакторе :(
Что я делаю не так и как нужно его открывать?
В качестве примера, я запускаю этот скрипт для получения фото клиента с id=114230
declare @KeyField int
declare @FileName nvarchar(1000)
declare @bcpCommand nvarchar(4000)
 
DECLARE c1 CURSOR FOR 
SELECT CustomerId
FROM dbo.Customer
WHERE CustomerId=114230
OPEN c1

FETCH NEXT FROM c1
INTO @KeyField

WHILE @@FETCH_STATUS = 0
BEGIN

-- Create unique name for the file using KeyField from the table
SELECT @FileName = 'C:\ttt\' + convert(varchar(18), @KeyField) + '.jpg'

SET @bcpCommand = 'bcp "SELECT Picture FROM [dbo].[Customer] WHERE CustomerId = ' + convert(varchar(18), @KeyField) + '" queryout "'
SET @bcpCommand = @bcpCommand + @FileName + '" -S MyServer\SQL2014 -T -n'


PRINT @bcpCommand
EXEC master..xp_cmdshell @bcpCommand, no_output

FETCH NEXT FROM c1
INTO @KeyField

END

CLOSE c1
DEALLOCATE c1 
3 июл 17, 12:38    [20608598]     Ответить | Цитировать Сообщить модератору
 Re: Как получить файл(JPG) из поля Image  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7383
abrashka,

попробуйте использовать этот код для заведомо исправной картинки. Потом ищите проблему, если останется.
3 июл 17, 12:48    [20608628]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как получить файл(JPG) из поля Image  [new]
_Gavrysh_
Member

Откуда:
Сообщений: 130
Владислав Колосов,
Добрый день. Использовал выше указанный скрипт. При открытие полученного файла выдаёт:
Средству просмотра Windows не удаётся открыть это изображение, так как файл повреждён или слишком велик.
Размер исходного и полученного файла совпадает. 46,8 Кб

К сообщению приложен файл. Размер - 46Kb
27 дек 19, 10:02    [22049888]     Ответить | Цитировать Сообщить модератору
 Re: Как получить файл(JPG) из поля Image  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33228
Блог
_Gavrysh_,

Побайтово сравните, предположу, что у вас появились какие-то добавки в начале или конце файла
27 дек 19, 10:18    [22049897]     Ответить | Цитировать Сообщить модератору
 Re: Как получить файл(JPG) из поля Image  [new]
_Gavrysh_
Member

Откуда:
Сообщений: 130
Да, действительно до 48 010, после 48 014. И откуда это берётся и как этим "бороться"?
27 дек 19, 10:26    [22049900]     Ответить | Цитировать Сообщить модератору
 Re: Как получить файл(JPG) из поля Image  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30700
_Gavrysh_
Да, действительно до 48 010, после 48 014. И откуда это берётся и как этим "бороться"?
1) И чем они отличаются?
2) Скрипт не меняли?
27 дек 19, 10:31    [22049904]     Ответить | Цитировать Сообщить модератору
 Re: Как получить файл(JPG) из поля Image  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1507
_Gavrysh_
Да, действительно до 48 010, после 48 014. И откуда это берётся и как этим "бороться"?
BCP в начало файла пишет 4 байта размера файла.
27 дек 19, 10:32    [22049908]     Ответить | Цитировать Сообщить модератору
 Re: Как получить файл(JPG) из поля Image  [new]
_Gavrysh_
Member

Откуда:
Сообщений: 130
alexeyvg
_Gavrysh_
Да, действительно до 48 010, после 48 014. И откуда это берётся и как этим "бороться"?
1) И чем они отличаются?
2) Скрипт не меняли?

datalength(Поля исходного файла(image)) тоже равно 48010

Скрипт менял только под свои таблицы. А на первый вопрос не знаю как ответить.
27 дек 19, 10:46    [22049921]     Ответить | Цитировать Сообщить модератору
 Re: Как получить файл(JPG) из поля Image  [new]
_Gavrysh_
Member

Откуда:
Сообщений: 130
Sergey Sizov
_Gavrysh_
Да, действительно до 48 010, после 48 014. И откуда это берётся и как этим "бороться"?
BCP в начало файла пишет 4 байта размера файла.

А есть средство избежать это? Читаю документацию про bpc пока про это ни чего не нашёл.
27 дек 19, 10:50    [22049923]     Ответить | Цитировать Сообщить модератору
 Re: Как получить файл(JPG) из поля Image  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
_Gavrysh_

А есть средство избежать это?

задать format file с одной SQLBINARY-колонкой.
27 дек 19, 11:02    [22049929]     Ответить | Цитировать Сообщить модератору
 Re: Как получить файл(JPG) из поля Image  [new]
uaggster
Member

Откуда:
Сообщений: 757
Если версия MSSQLSERVER - позволяет (2012+), создайте таблицу filetable с нетранзакционным доступом, и сохраняйте свои картинки туда сразу, минуя возню с bcp.
27 дек 19, 11:10    [22049938]     Ответить | Цитировать Сообщить модератору
 Re: Как получить файл(JPG) из поля Image  [new]
_Gavrysh_
Member

Откуда:
Сообщений: 130
Yasha123
_Gavrysh_

А есть средство избежать это?

задать format file с одной SQLBINARY-колонкой.

Всего и делов то ) Не подскажите как?
27 дек 19, 11:35    [22049954]     Ответить | Цитировать Сообщить модератору
 Re: Как получить файл(JPG) из поля Image  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
_Gavrysh_,

создаете файл с расширением .fmt.

9.0 
1
1 SQLBINARY 0 0 "" 1 Data ""

в команде bcp дописываете атрибут "-f <путь к fmt-файлу>"

Сообщение было отредактировано: 27 дек 19, 11:41
27 дек 19, 11:40    [22049958]     Ответить | Цитировать Сообщить модератору
 Re: Как получить файл(JPG) из поля Image  [new]
_Gavrysh_
Member

Откуда:
Сообщений: 130
Minamoto,
Yes! Получилось спасибо. И остальным спасибо тоже.
27 дек 19, 12:07    [22049988]     Ответить | Цитировать Сообщить модератору
 Re: Как получить файл(JPG) из поля Image  [new]
_Gavrysh_
Member

Откуда:
Сообщений: 130
и да, параметр -n не нужен
27 дек 19, 13:24    [22050066]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить