Обработка xml в sql / преобразование xml в varchar

#sql-server-2005

#sql-server-2005

Вопрос:

 -------- -------------------------------------------------------
int     |xml
-------- -------------------------------------------------------
2       |<items>
        |    <item>
        |         <description>item 21 </description>
        |    </item>
        |    <item>
        |      <description>item 22</description>
        |    </item>
        |</items>
-------- -------------------------------------------------------
3       |<items>
        |    <item>
        |         <description>item 31 </description>
        |    </item>
        |</items>
-------- -------------------------------------------------------
4       |<items>
        |    <item>
        |         <description>item 31 </description>
        |    </item>
        |    <item>
        |      <description>item 32</description>
        |    </item>
        |    <item>
        |      <description>item 33</description>
        |    </item>
        |</items>
-------- -------------------------------------------------------
  

У меня есть таблица, подобная приведенной выше структуре и типу,
Я должен преобразовать его в структуру и тип, как показано ниже

 -------- -------------------------------------------------------
int     |varhcar
-------- -------------------------------------------------------
2       |     item 21 
-------- -------------------------------------------------------  
2       |     item 22  
-------- -------------------------------------------------------
3       |     item 31   
-------- -------------------------------------------------------
4       |     item 41  
-------- -------------------------------------------------------
4       |     item 42   
-------- -------------------------------------------------------
4       |     item 43
-------- -------------------------------------------------------
  

Приветствуется любая помощь, пожалуйста

Ответ №1:

Попробуйте это:

 SELECT
    ID, 
    Item.value('(description)[1]', 'varchar(50)') AS 'DescText'
FROM 
    dbo.YourTable
CROSS APPLY 
    xml.nodes('/items/item') AS Node(Item)
  

Это должно выбрать идентификатор (или int) из вашей таблицы и захватить все содержимое <description> узлов из XML.