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

Откуда:
Сообщений: 29
Добрый день!
Не нашел поиском нужной информации.
Есть таблица Table1
NameLogDateNub
Name1LogDate1Nub1
Name2LogDate2Nub2
Name3LogDate3Nub3
Name4LogDate4Nub4

Из этой таблицы требуется выгрузить XML-файлы (для каждой строки - свой XML файл)
Структура и название файлов везде одинаковое. Меняются только значения Name, LogDate и Nub. в имени файла и в содержимом.
После обращения к этой таблице должно получиться 4 xml с именами:
docum_Name1_Nub1_Telecom07_LogDate1.xml
docum_Name2_Nub2_Telecom07_LogDate2.xml
... и т.д.

и структурой:
+ структура для первого файла

<?xml version="1.0" encoding="windows-1251"?><File Name="Name1" xmlns="urn:umc-file-document" GUID="1g135h15-65n3-db41-81yc-1rewe4b738v1" xsi:schemaLocation="file.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><filecol><Company Nub="Nub1" LogDate="LogDate1" ID="1" /><Database><Log>LogDate1</INN><Nub>Nub1</Nub></Database></filecol></File>

Все, что выделено у меня жирным шрифтом - данные из таблицы, все остальное - статично и никогда не изменяется.

Помогите решить такую задачу. for xml сохраняет все записи в один файл
22 май 11, 22:18    [10691264]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка в несколько XML  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Сколько файлов - столько и запросов.
Другими словами - какова задача, таково и решение.

Вы нам задали, теперь мы вам. :)
А что за задача такая, что нужно каждую строку в отдельный файл?
22 май 11, 22:55    [10691399]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка в несколько XML  [new]
Solovejs
Member

Откуда:
Сообщений: 29
Есть сторонняя программа, которая обрабатывает файлы такого типа и выдает на каждый свой ответ - ничего тут не поделать.
Т.е. как я понимаю, средствами SQL реализовать подобную выгрузку не представляется возможным?

(забыл добавить, что используется MS SQL 2005)
22 май 11, 23:49    [10691578]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка в несколько XML  [new]
Fire83
Member

Откуда: Гомель-Минск
Сообщений: 474
Solovejs
Есть сторонняя программа, которая обрабатывает файлы такого типа и выдает на каждый свой ответ - ничего тут не поделать.
Т.е. как я понимаю, средствами SQL реализовать подобную выгрузку не представляется возможным?
(забыл добавить, что используется MS SQL 2005)

Сделать то можно конечно, но при вашей постановке придется использовать курсор.
Про формирование XML на основе запроса почитайте про FOR XML в BOL
Записать в файл можно используя например sp_OACreate 'Scripting.FileSystemObject'.
23 май 11, 00:55    [10691775]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка в несколько XML  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Fire83
Записать в файл можно используя например sp_OACreate 'Scripting.FileSystemObject'.
Проще ADODB.Stream: 9803638

Fire83
Сделать то можно конечно, но при вашей постановке придется использовать курсор.
Можно и без курсора, опять таки воспользовавшись FOR XML.

Solovejs
Есть сторонняя программа, которая обрабатывает файлы такого типа и выдает на каждый свой ответ - ничего тут не поделать.
Имхо, дурацкая программа. Шгольнягов садят соффт пяйсать. Сталина на них нет. ;)
Не люблю когда пишут для единиц, а не для списка. (опять камень в сторону тупых процедур)
23 май 11, 11:45    [10693092]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка в несколько XML  [new]
Fire83
Member

Откуда: Гомель-Минск
Сообщений: 474
[quot Mnior]
Fire83
Fire83
Сделать то можно конечно, но при вашей постановке придется использовать курсор.
Можно и без курсора, опять таки воспользовавшись FOR XML.


Интересно как вы тут без курсора можете обойтись? То что можно весь результат перевести в правильный XML одном запросом это понятно.Покажите как сделать без курсора выгрузку в разные файлы каждой строки... я именно этот курсор имел ввиду
23 май 11, 12:21    [10693439]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка в несколько XML  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Fire83, FOR XML можно использовать для агрегации строк.
Генерируем один дли-и-и-и-нный скрипт одним запросом, а потм тупо EXEC(@Batch). Чё тут сложного?
23 май 11, 12:48    [10693723]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка в несколько XML  [new]
Fire83
Member

Откуда: Гомель-Минск
Сообщений: 474
Mnior,
Да, согласен, не сообразил сразу что можно через динамику сделать.
23 май 11, 13:29    [10694067]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка в несколько XML  [new]
Solovejs
Member

Откуда:
Сообщений: 29
Если не сложно, выложите пример...
Пока не могу сообразить как реализовать.

С преобразованием в XML, выгрузкой нет проблем, но только для одной записи (т.е. в запросе во Where указываю условие принадлежности к одной строке.
23 май 11, 16:47    [10695662]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка в несколько XML  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
DECLARE @Batch NVarChar(max)
SET @Batch = 'DECLARE @Data NVarChar(max);' + (SELECT '
WITH XMLNAMESPACES(''http://www.w3.org/2001/XMLSchema-instance'' AS xsi)
SELECT @Data = ''<?xml version="1.0" encoding="utf8"?>'' + (
SELECT ... ', '
WHERE @ID = ', ID [*], '...
FOR XML Path(''File''));
EXEC dbo.spSaveToFile ',QuoteName('docum_' + Name + '_' + Nub + '_Telecom07_' + LogDate + '.xml',''''),', @Data ;'
FROM	dbo.MyTable FOR XML Path(''),Type).value('text()[1]','NVarChar(max)')

-- BEGIN TRY
-- PRINT @Batch
EXEC(@Batch)
-- END TRY BEGIN CATCH ... END CATCH

Блин курсор лучше, текста больше, зато всё видно и понятно.
Тупая задача заставляет делать тупой код. Буэ.
23 май 11, 21:54    [10696992]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить