Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OPENXML to .nodes(), вывод в формате XML 
V
    Опции темы
lv151
Дата 25.3.2013, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



Код

DECLARE @XML_Ptr INT
DECLARE @InXML XML = '<recipe>  
  <composition>
    <ingredient amount="3" unit="стакан">Мука</ingredient>
    <ingredient amount="0.25" unit="грамм">Дрожжи</ingredient>
    <ingredient amount="1.5" unit="стакан">Тёплая вода</ingredient>
    <ingredient amount="1" unit="чайная ложка">Соль</ingredient>
  </composition>
  <composition>
    <ingredient amount="1" unit="стакан1">Мука</ingredient>
    <ingredient amount="2" unit="грамм2">Дрожжи</ingredient>
    <ingredient amount="3" unit="стакан3">Тёплая вода</ingredient>
    <ingredient amount="4" unit="чайная ложка4">Соль</ingredient>
  </composition>
  </recipe>'
  
EXEC sp_xml_preparedocument @XML_Ptr OUTPUT, @InXML

SELECT recipe.rec
   FROM OPENXML (@XML_Ptr, '/recipe/composition', 2)
   WITH (         
          rec XML     '../composition'
        ) recipe


Код


Пытаюсь переделать на nodes:
 SELECT T.c.value('../composition[1]', 'xml' ) AS rec        
 FROM @InXML.nodes('/recipe/composition') T(c)


The data type 'xml' used in the VALUE method is invalid.

Возможно ли как-то по-другому вывести данные в формате xml?
PM MAIL   Вверх
Zioma
Дата 25.3.2013, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 22.8.2007

Репутация: 5
Всего: 5



Если так
Код

SELECT
    T.c.value('../composition[1]', 'nvarchar(max)' ) AS rec        
FROM @InXML.nodes('/recipe/composition') T(c)


то результат такой
Код

МукаДрожжиТёплая водаСоль
МукаДрожжиТёплая водаСоль


А вобще надо указывать, что вы хотите получить в результате.
PM MAIL   Вверх
lv151
Дата 25.3.2013, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



Код

SELECT recipe.rec
   FROM OPENXML (@XML_Ptr, '/recipe/composition', 2)
   WITH (         
          rec XML     '../composition'
        ) recipe


Результат:
Код

<composition><ingredient amount="3" unit="стакан">Мука</ingredient><ingredient amount="0.25" unit="грамм">Дрожжи</ingredient><ingredient amount="1.5" unit="стакан">Тёплая вода</ingredient><ingredient amount="1" unit="чайная ложка">Соль</ingredient></composition>
<composition><ingredient amount="3" unit="стакан">Мука</ingredient><ingredient amount="0.25" unit="грамм">Дрожжи</ingredient><ingredient amount="1.5" unit="стакан">Тёплая вода</ingredient><ingredient amount="1" unit="чайная ложка">Соль</ingredient></composition>


Код

SELECT
    T.c.value('../composition[1]', 'nvarchar(max)' ) AS rec        
FROM @InXML.nodes('/recipe/composition') T(c)


Результат:
МукаДрожжиТёплая водаСоль
МукаДрожжиТёплая водаСоль


Возможно ли чтобы при работе с nodes результат был такой:
Код

<composition><ingredient amount="3" unit="стакан">Мука</ingredient><ingredient amount="0.25" unit="грамм">Дрожжи</ingredient><ingredient amount="1.5" unit="стакан">Тёплая вода</ingredient><ingredient amount="1" unit="чайная ложка">Соль</ingredient></composition>
<composition><ingredient amount="3" unit="стакан">Мука</ingredient><ingredient amount="0.25" unit="грамм">Дрожжи</ingredient><ingredient amount="1.5" unit="стакан">Тёплая вода</ingredient><ingredient amount="1" unit="чайная ложка">Соль</ingredient></composition>

PM MAIL   Вверх
Zioma
Дата 25.3.2013, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 22.8.2007

Репутация: 5
Всего: 5



Возможно так:
Код

select 
    c.query('.')
FROM
    @InXML.nodes('/recipe/composition') T(c)


А в вашем результате первая ветка повторяется 2 раза.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0726 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.