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

Откуда: Саратов
Сообщений: 481
Доброго времени суток!
На входе таблица с файлами:
CREATE TABLE [dbo].[tbFiles]
(	[ID] [int] identity(1, 1)  NOT NULL,
	[Name] [nvarchar](500) NOT NULL,
	[Extension] [nvarchar](15),
	[Data] [varbinary](max) NOT NULL)

Необходимо каждую строчку этой таблицы выгрузить в файл Name.Extension с содержанием Data.
Можно это сделать sql-командой?
25 ноя 13, 11:30    [15184166]     Ответить | Цитировать Сообщить модератору
 Re: Построчная сериализация таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
Шамиль Фаридович
Можно это сделать sql-командой?

Одной - нет
25 ноя 13, 11:33    [15184187]     Ответить | Цитировать Сообщить модератору
 Re: Построчная сериализация таблицы  [new]
Шамиль Фаридович
Member

Откуда: Саратов
Сообщений: 481
Не страшно.
Пусть этот будет курсор.
25 ноя 13, 11:51    [15184328]     Ответить | Цитировать Сообщить модератору
 Re: Построчная сериализация таблицы  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 34760
Блог
Шамиль Фаридович,

один из тех редких случаев, когда курсор реально полезен
25 ноя 13, 11:52    [15184338]     Ответить | Цитировать Сообщить модератору
 Re: Построчная сериализация таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
Шамиль Фаридович
Не страшно.
Пусть этот будет курсор.

Ну так делайте курсором
25 ноя 13, 11:54    [15184351]     Ответить | Цитировать Сообщить модератору
 Re: Построчная сериализация таблицы  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Glory
Шамиль Фаридович
Не страшно.
Пусть этот будет курсор.

Ну так делайте курсором



вы уж меня простите, но зачем же так....
ведь очевидно же (КЭП), что человек спрашивает как именно ЭТО сделать, а не спрашивает на форуме разрешения сделать ЭТО через курсор.

т.е. вопрошающий хочет знать как средствами - t-sql (если это возможно) данные из varbinary(max) загнать в файл.

омхо, если суть или стиль постановки вопроса вызывают неприязнь - лучше не отвечать.
25 ноя 13, 13:04    [15184758]     Ответить | Цитировать Сообщить модератору
 Re: Построчная сериализация таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
Jaffar
омхо, если суть или стиль постановки вопроса вызывают неприязнь - лучше не отвечать.

Вызывает неприязнь нежелание ни пользоваться поиском, ни внятно формулировать вопрос.
Если хочется отвечать, отвечайте автору, а не учите других, как надо отвечать.
25 ноя 13, 13:07    [15184778]     Ответить | Цитировать Сообщить модератору
 Re: Построчная сериализация таблицы  [new]
Шамиль Фаридович
Member

Откуда: Саратов
Сообщений: 481
Jaffar
омхо, если суть или стиль постановки вопроса вызывают неприязнь - лучше не отвечать.

В точку.
А с поиска я обычно начинаю. В какую сторону копать? OPENDATASOURCE, а есть что-нибудь более подходящее?
25 ноя 13, 13:48    [15185139]     Ответить | Цитировать Сообщить модератору
 Re: Построчная сериализация таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
Шамиль Фаридович
А с поиска я обычно начинаю.

Оно и видно
https://www.sql.ru/forum/afsearch.aspx?s=????????? ? ????&submit=?????&bid=1
25 ноя 13, 13:49    [15185143]     Ответить | Цитировать Сообщить модератору
 Re: Построчная сериализация таблицы  [new]
skorpk
Member

Откуда: Волгоград
Сообщений: 276
А почему не желаете сделать это с помощью SSIS или мастера импорта/экспорта данных?
25 ноя 13, 14:47    [15185689]     Ответить | Цитировать Сообщить модератору
 Re: Построчная сериализация таблицы  [new]
Шамиль Фаридович
Member

Откуда: Саратов
Сообщений: 481
Потому что в итоге запускать буду не я.
В общем, Glory, нехороший человек, написал на эту тему фак, даже 2:
https://www.sql.ru/faq/faq_topic.aspx?fid=131
https://www.sql.ru/faq/faq_topic.aspx?fid=122
Но сидит тут и партизанит. А вообще было бы неплохо, если бы в результатах поисках отображались подходящие статьи из фака.
25 ноя 13, 15:47    [15186217]     Ответить | Цитировать Сообщить модератору
 Re: Построчная сериализация таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
Шамиль Фаридович
Но сидит тут и партизанит.

Т.е. FAQ вы читаете в конце всех обсуждений ?
25 ноя 13, 15:56    [15186273]     Ответить | Цитировать Сообщить модератору
 Re: Построчная сериализация таблицы  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Критик
Шамиль Фаридович,

один из тех редких случаев, когда курсор реально полезен


Задача явно не уровня СУБД. Решается прозрачно одной строчкой кода application уровня.
25 ноя 13, 20:34    [15187898]     Ответить | Цитировать Сообщить модератору
 Re: Построчная сериализация таблицы  [new]
Шамиль Фаридович
Member

Откуда: Саратов
Сообщений: 481
Решение:
DECLARE @OutputDirectory varchar(250) = 'C:\Temp\'			--выходная директория
DECLARE @FormatFile varchar(250) = 'C:\Temp\format.fmt'		--файл форматирования
DECLARE @cmd nvarchar(1000)
DECLARE @ID int
DECLARE @filename nvarchar(200)
DECLARE @ext nvarchar(10)

declare cur cursor
for select ID, [Name], Extension from tbFiles

open cur
fetch next from cur into @id, @filename, @ext
while @@FETCH_STATUS = 0 
begin
	set @filename = cast(@id as nvarchar(20)) + '_' +@filename	--для уникальности имени файла
	set @cmd = N'bcp "select Data from tbFiles where ID = ' + cast(@id as nvarchar(45)) +'" queryout "' + @OutputDirectory +@filename + '.' + @ext +  '" -C RAW -T -d ' +db_name() + ' -f ' + @FormatFile
	EXEC master..xp_cmdshell @cmd, no_output
	fetch next from cur into @id, @filename, @ext
end
close cur
deallocate cur

Пришлось использовать файл форматирования, так как если использовать только параметр "-n", в начале файла появлялся ненужный префикс.

К сообщению приложен файл (format.fmt - 79bytes) cкачать
26 ноя 13, 14:09    [15191401]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить