Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
Liana2509
Member

Откуда: РБ, Нефтекамск
Сообщений: 27
Доброго времени суток!
Направьте, пожалуйста. Абсолютный новичок в вопросе xml.

Есть файл xsd, есть база где известны все таблицы.поля с нужными данными.
Нужно сформировать файл xml для сторонней программы.

С чего начать? что почитать? можно ли как-то средствами MS sqlXML получить?

хелпы смотрю: отправляет на XMLсхемы на Visual Studio,
SELECT... FOR XML выдает непонятно по тегам - файл как xml не читается.
понимаю, что чем больше "перелопатить" информации, тем яснее будет вопрос, но времени маловато
22 янв 15, 14:47    [17154542]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Liana2509
С чего начать? что почитать? можно ли как-то средствами MS sqlXML получить?

Читать хелп FOR XML

Liana2509
SELECT... FOR XML выдает непонятно по тегам - файл как xml не читается.

Не читается чем ? И с какой ошибкой ?
22 янв 15, 14:51    [17154578]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
DKasimov
Member

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

Liana2509

С чего начать? что почитать? можно ли как-то средствами MS sqlXML получить?


https://msdn.microsoft.com/ru-ru/library/ms178107.aspx
22 янв 15, 14:54    [17154606]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8839
Liana2509, схема используется только для контроля "well-formed" документа, она не является основой для построения.
22 янв 15, 15:08    [17154756]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
petalvik
Member

Откуда:
Сообщений: 716
Liana2509
SELECT... FOR XML выдает непонятно по тегам - файл как xml не читается.

FOR XML выдаёт набор узлов без корневого элемента. Вероятно, поэтому не читается. Нужно полученные от сервера данные добавить в корень документа.
22 янв 15, 16:55    [17155603]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
Konst_One
Member

Откуда:
Сообщений: 11625
root('root')


https://msdn.microsoft.com/ru-ru/library/bb522623.aspx
22 янв 15, 16:58    [17155623]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
Liana2509
Member

Откуда: РБ, Нефтекамск
Сообщений: 27
Доброго времени суток!

Как-то можно написать "select .... for xml", чтобы определенные поля были между нужными тегами?
4 фев 15, 07:26    [17215300]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
aleks2
Guest
select 1 as [Тэг] for xml path('')
4 фев 15, 08:53    [17215414]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
declare @root varchar(max) = 'rootName'

--  какой-то заголовок
declare @header table (h1 int, h2 varchar(max))
insert @header
values (10, 'this is header') -- только одна строка заголовка

-- строки данных из одной таблицы
declare @recipients table (id int)
insert @recipients
values (100), (200)

-- строки данных из другой таблицы
declare @rows table (f1 int, f2 varchar(max))
insert @rows
values (5, 'text1'), (7, 'text2')

select * from @header
select * from @recipients
select * from @rows


select
  rootName.*
  , (select id as [RecipientID] from @recipients for xml path(''),type) as [Recipients]
  , (select f1 as [Data/@ID],f2 as [Data/@Value] from @rows for xml path(''),type) as [Rows]
from @header rootName for xml auto
4 фев 15, 09:24    [17215497]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
Liana2509
Member

Откуда: РБ, Нефтекамск
Сообщений: 27
aleks2, Спасибо! получилось.

а как получить вложенность? как в один тег еще несколько тегов можно вставить?

вот есть два запроса, выводят нормально:

select ПродНаимОрг as [НаимОрг], ПродИННЮл as [ИннЮл], ПродКпп as [КПП]
FROM kpp_2014_xml where продНаимОрг = @продНаимОрг for xml path('СвЮЛ'), root('ИдСв')

select ПродИндекс as [Индекс], ПродКодРегион as [КодРегион], ПродГород as [Город], ПродУлица as [Улица], ПродДом as [Дом]
FROM kpp_2014_xml where продНаимОрг = @продНаимОрг for xml path('АдрРФ'), root('Адрес')

как их объединить в общий тэг?
4 фев 15, 09:25    [17215500]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
aleks2
Guest
XML = текст.

Или еще один запрос нарисовать.

select
(
select ПродНаимОрг as [НаимОрг], ПродИННЮл as [ИннЮл], ПродКпп as [КПП]
FROM kpp_2014_xml where продНаимОрг = @продНаимОрг for xml path('СвЮЛ'), root('ИдСв')
) as [Тэг1]
,(
select ПродИндекс as [Индекс], ПродКодРегион as [КодРегион], ПродГород as [Город], ПродУлица as [Улица], ПродДом as [Дом]
FROM kpp_2014_xml where продНаимОрг = @продНаимОрг for xml path('АдрРФ'), root('Адрес') 
) as [Тэг2]
for xml path('');
4 фев 15, 09:29    [17215528]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
Liana2509
Member

Откуда: РБ, Нефтекамск
Сообщений: 27
LexusR, Спасибо огромное! на минуту раньше моего вопроса, дали ответ )
4 фев 15, 09:33    [17215543]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
Liana2509
Member

Откуда: РБ, Нефтекамск
Сообщений: 27
aleks2, Спасибо огромное! Вроде, все понятно, попробую
4 фев 15, 09:33    [17215547]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
Liana2509
Member

Откуда: РБ, Нефтекамск
Сообщений: 27
Liana2509,
нужно написать файл xml для загрузки. 1ый вариант, как у меня получилось (часть файла), второй - пример загружаемого файла.
это разные тексты для загрузчика?
у меня не проходит проверку на соответствие схеме xsd.....

1.
  <ТаблСчФакт>
    <СведТов>
      <НомСтр>1</НомСтр>
      <НаимТов>Платеж по лизингу</НаимТов>
      <СтТовУчНал>195961.00</СтТовУчНал>
      <Акциз>
        <СумАкциз>"без акциза"</СумАкциз>
      </Акциз>
      <СумНал>
        <СумНДС>29892.3600</СумНДС>
      </СумНал>
    </СведТов>
    <ВсегоОпл>
      <СтТовУчНалВсего>195961.00</СтТовУчНалВсего>
      <СумНалВсего>
        <СумНДС>29892.36</СумНДС>
      </СумНалВсего>
    </ВсегоОпл>
  </ТаблСчФакт>


2.
- <ТаблСчФакт>
- <СведТов НомСтр="1" НаимТов="Платеж по лизингу" СтТовУчНал="195961.00">
  <Акциз СумАкциз="без акциза" /> 
  <СумНал СумНДС="29892.36" /> 
  </СведТов>
- <ВсегоОпл СтТовУчНалВсего="195961.00">
  <СумНалВсего СумНДС="29892.36" /> 
  </ВсегоОпл>
  </ТаблСчФакт>
5 фев 15, 07:19    [17220273]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
Liana2509,
конечно разные
например у вас
<НомСтр>1</НомСтр>
<НаимТов>Платеж по лизингу</НаимТов>
<СтТовУчНал>195961.00</СтТовУчНал>
это узлы вложенные в узел <СведТов>
а в варианте 2
НомСтр="1" НаимТов="Платеж по лизингу" СтТовУчНал="195961.00" - это атрибуты узла <СведТов>
Привидите текст sql- которым вы получаете xml вариант 1 - попробуем его подрихтовать чтобы получить вариант 2
5 фев 15, 08:18    [17220330]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
Liana2509
Member

Откуда: РБ, Нефтекамск
Сообщений: 27
LexusR,
(select
  (select id as [НомСтр], НаимТов as [НаимТов], СтТовУчНал as [СтТовУчНал]
          , (select '"без акциза"' as [СумАкциз] for xml path(''), type) as 'Акциз'         
          , (select СумНдс as [СумНДС] for xml path(''), type) as 'СумНал'
       FROM  kpp_2014_xml_pdocmat  for xml path(''),type) as 'СведТов'
  ,
   (select СтТовУчНалВсего as [СтТовУчНалВсего]         
          , (select СумНдс as [СумНДС] for xml path(''), type) as 'СумНалВсего'
       FROM  kpp_2014_xml  for xml path(''), type) as 'ВсегоОпл'
for xml path(''),type) as 'ТаблСчФакт' 
5 фев 15, 08:27    [17220344]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
Liana2509,

а структура таблиц kpp_2014_xml_pdocmat и kpp_2014_xml ?
5 фев 15, 08:38    [17220365]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
Liana2509
Member

Откуда: РБ, Нефтекамск
Сообщений: 27
LexusR, спасибо за помощь

"до вчерашнего дня" не сталкивалась с xml, что такое атрибуты - тоже не знаю... стыдно

таблицы простые, дополнительно их создала, все данные подтянула, типы данных nvarchar() или money:

select * ДокументКНД, tdoc, НомерСчФ, ДатаСчФ, КодОКВ, ПродНаимОрг, ПродИннЮЛ,  ПродКПП,
                     ПродИндекс,ПродКодРегион, ПродГород,ПродУлица, ПродДом, ПродКвартира, НомерПРД, 
                     ДатаПРД, ПокупНаимОрг, ПокупИннЮЛ, ПокупКПП, ПокупИндекс, ПокупКодРегион,ПокупГород,
                     ПокупУлица, ПокупДом,ПокупКорпус,СтТовУчНалВсего,СумНДС from kpp_2014_xml

 select * from НаимТов, СтТовУчНал, СумАкциз, НалСтВел, НалСтТип, СумНДС from kpp_2014_xml_pdocmat
5 фев 15, 08:56    [17220398]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
Liana2509
Member

Откуда: РБ, Нефтекамск
Сообщений: 27
select'ы умею писать простые ) выше накопировала не с того места
5 фев 15, 08:57    [17220405]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
что - то типа такого попробуйте
select 
  id as [СведТов/@НомСтр]
, НаимТов as [СведТов/@НаимТов]
, СтТовУчНал as [СведТов/@СтТовУчНал]
, СумАкциз as [СведТов/Акциз/@СумАкциз] 
, СумНдс as [СведТов/СумНал/@СумНДС]
,(select   СтТовУчНалВсего as [ВсегоОпл/@СтТовУчНалВсего]         
          ,СумНдс as [ВсегоОпл/СумНалВсего/@СумНДС]
  FROM  kpp_2014_xml  for xml path(''), type) as '*'
FROM  kpp_2014_xml_pdocmat  for xml path(''),root('ТаблСчФакт'),type 


но по идее таблицы kpp_2014_xml и kpp_2014_xml_pdocmat должны быть как то связаны
если конечно это уже не уже преподготовленные к выгрузке данные
5 фев 15, 09:07    [17220434]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
Liana2509
Member

Откуда: РБ, Нефтекамск
Сообщений: 27
LexusR, Спасибо огромное!
прям все как надо )
постараюсь, остальные части по аналогии прописать
5 фев 15, 09:21    [17220488]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
Liana2509
Member

Откуда: РБ, Нефтекамск
Сообщений: 27
Доброго времени суток!

осталось чуть-чуть:
процедура ngs.dbo.Export_XML_UL 123 возвращает xml-фрагмент как нужно,
как добавить строку <?xml version="1.0" encoding="windows-1251"?> в создаваемый файл?
файл создаю так (спасибо, всем кто делится знаниями):

 
DECLARE @result int
DECLARE @OutputFileName varchar(max)
DECLARE @cmd varchar(8000)

Set @OutputFileName = 'C:\\111\123.xml'

Set @cmd = 'BCP "EXEC ngs.dbo.Export_XML_UL 123" queryout "' + @OutputFileName + '" -c -C1251 -r -T'

EXEC @result = master..xp_cmdshell  @cmd  
6 фев 15, 10:03    [17226485]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
из процедуры выводите сконкатенированную строку
declare @xml xml
set @xml = 
(select 
  id as [СведТов/@НомСтр]
, НаимТов as [СведТов/@НаимТов]
, СтТовУчНал as [СведТов/@СтТовУчНал]
, СумАкциз as [СведТов/Акциз/@СумАкциз] 
, СумНдс as [СведТов/СумНал/@СумНДС]
,(select   СтТовУчНалВсего as [ВсегоОпл/@СтТовУчНалВсего]         
          ,СумНдс as [ВсегоОпл/СумНалВсего/@СумНДС]
  FROM  kpp_2014_xml  for xml path(''), type) as '*'
FROM  kpp_2014_xml_pdocmat  for xml path(''),root('ТаблСчФакт'),type) 

select '<?xml version="1.0" encoding="windows-1251"?>' +cast(@xml as varchar(max))
6 фев 15, 11:01    [17226866]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
Liana2509
Member

Откуда: РБ, Нефтекамск
Сообщений: 27
LexusR, по - хорошему, мне нужно поделиться с Вами половиной премии )

а как поступают, если файл xml очень большой, по смысловым частям переводят в строковую переменную и плюсуют сколько нужно раз? ведь в тип nvarchar - максимум 8000 символов вмещается

еще одно "Огромное Спасибо!" и приятных Вам выходных
6 фев 15, 11:27    [17227085]     Ответить | Цитировать Сообщить модератору
 Re: Направьте, пож-та. Есть схема xsd, как получить xml файл с данными?  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
cast(@xml as varchar(max))
6 фев 15, 12:00    [17227384]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить