Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выгрузить данные в xml файл с заголовком <?xml version="1.0" encoding="UTF-8"?>  [new]
Vinni059
Member

Откуда: Perm
Сообщений: 22
Задача: выгрузить данные в xml файл с заголовком <?xml version="1.0" encoding="UTF-8"?>
1)есть процедура, возвращяющая xml структуру
Create procedure [dbo].[get_xml]
as
begin
select top 1 1 as tag,0 as parent
	,price as 'price!1!id!element'
	,name as 'price!1!name!element'
	,null as 'position!2!idnom!element'
	,null as 'position!2!naim!element'
	,null as 'position!2!price!element'
from tpr as price
union all
select
	2 as tag, 1 as parent
	,price
	,name 
	,IDNOM as idnom 
	,NAIM as naim
	,cast(tumen as numeric(18,2)) as price
from tpr as position
order by 'position!2!naim!element'
	for xml explicit
end

2) выгружаю с помощью bcp

DECLARE @result int
DECLARE @OutputFileName varchar(150)
DECLARE @cmd varchar( 150)

Set @OutputFileName = 'c:\mysql.xml'

Set @cmd = 'BCP "EXEC get_xml" queryout "' + @OutputFileName + '" -w -r -T'

EXEC @result = master..xp_cmdshell @cmd

в результате получается файл со следующим содержанием
<price>
  <id>1</id>
  <name>base_perm</name>
  <position>
    <idnom>570081265</idnom>
    <naim>1000 трав от Мазнева сбор N2 крем-бальзам для поясницы 85мл N 1</naim>
    <price>80.68</price>
  </position>
  <position>
    <idnom>570101265</idnom>
    <naim>1000 трав от Мазнева сбор N4 крем-бальзам д/суставов и позвоночника 85мл N 1</naim>
    <price>100.07</price>
  </position>
  <position>
    <idnom>57720491</idnom>
    <naim>32- бионорма освежитель дыхания сочный цитрус 8 мл N 1</naim>
    <price>30.38</price>
  </position>
</price>

а мне нужно
<?xml version="1.0" encoding="UTF-8"?> 
<price>
  <id>1</id>
  <name>base_perm</name>
  <position>
    <idnom>570081265</idnom>
    <naim>1000 трав от Мазнева сбор N2 крем-бальзам для поясницы 85мл N 1</naim>
    <price>80.68</price>
  </position>
  <position>
    <idnom>570101265</idnom>
    <naim>1000 трав от Мазнева сбор N4 крем-бальзам д/суставов и позвоночника 85мл N 1</naim>
    <price>100.07</price>
  </position>
  <position>
    <idnom>57720491</idnom>
    <naim>32- бионорма освежитель дыхания сочный цитрус 8 мл N 1</naim>
    <price>30.38</price>
  </position>
</price>

Вопрос: как и где можно указать заголовок получаемого xml файла (версию и кодировку). Возможно, где-то непосредственно в sql-запросе, либо в утилите выгрузки (bcp или нужно использовать другой механизм).
И второй вопрос, более сложный, на мой взгляд: некоторые поля имеют значение null, в этом случае тег не должен формироваться. Можно ли организовать такую выгрузку средствами sql-server
28 ноя 11, 20:46    [11674232]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузить данные в xml файл с заголовком <?xml version="1.0" encoding="UTF-8"?>  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Как люди любят себе проблемы придумывать:
copy XmlHeader.txt + out.xml new.xml
Притом прямо в xp_CmdShell допишите через &

А UTF-8 вы не создадите старыми средствами SQL. BCP не поддерживает эту кодировку. Напишите UTF-16 (вы же указали -w), разницы никакой?!

А почему у вас неудобные элементы, а не нормальные атрибуты? (да и названия странные)
<price id="1" name="base_perm">
  <position id="570081265" name="1000 трав от Мазнева сбор N2 крем-бальзам для поясницы 85мл N 1" price="80.68" />
  <position id="570101265" name="1000 трав от Мазнева сбор N4 крем-бальзам д/суставов и позвоночника 85мл N 1" price="100.07" />
  <position id="57720491" name="32- бионорма освежитель дыхания сочный цитрус 8 мл N 1" price="30.38" />
</price>
Или так:
<price id="1" name="base_perm">
  <position id="570081265" price="80.68">1000 трав от Мазнева сбор N2 крем-бальзам для поясницы 85мл N 1</position>
  <position id="570101265" price="100.07">1000 трав от Мазнева сбор N4 крем-бальзам д/суставов и позвоночника 85мл N 1</position>
  <position id="57720491" price="30.38">32- бионорма освежитель дыхания сочный цитрус 8 мл N 1</position>
</price>
29 ноя 11, 00:14    [11674880]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить