Как извлечь данные из столбца XML в SQL 2008 - PullRequest
1 голос
/ 07 марта 2012

У меня есть таблица со столбцом типа xml. Я должен извлечь значения из столбца XML. Я перепробовал все возможные способы, но не смог.

<Menu>
  <Id>1</Id>
    <Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-1.jpg</Url>
</Menu>
<Menu>
  <Id>2</Id>
  <Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-2.jpg</Url>
</Menu>
<Menu>
  <Id>3</Id>
  <Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-3.jpg</Url>
</Menu>
<Menu>
  <Id>4</Id>
  <Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-4.jpg</Url>
</Menu>
<Menu>
  <Id>5</Id>
  <Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-5.jpg</Url>
</Menu>

Пожалуйста, помогите мне извлечь данные. Тонны благодарности заранее.

Спасибо, Darthick. s.darthick@gmail.com

Ответы [ 2 ]

2 голосов
/ 07 марта 2012
declare @T table
(
  XMLCol xml
)

insert into @T values
('<Menu>
    <Id>1</Id>
      <Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-1.jpg</Url>
  </Menu>
  <Menu>
    <Id>2</Id>
    <Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-2.jpg</Url>
  </Menu>
  <Menu>
    <Id>3</Id>
    <Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-3.jpg</Url>
  </Menu>
  <Menu>
    <Id>4</Id>
    <Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-4.jpg</Url>
  </Menu>
  <Menu>
    <Id>5</Id>
    <Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-5.jpg</Url>
  </Menu>')

select X.N.value('Id[1]', 'int') as Id,
       X.N.value('Url[1]', 'varchar(max)') as Url
from @T as T
  cross apply T.XMLCol.nodes('/Menu') as X(N)

Результат:

Id          Url
----------- ---------------------------------------------------------------------
1           http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-1.jpg
2           http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-2.jpg
3           http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-3.jpg
4           http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-4.jpg
5           http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-5.jpg
1 голос
/ 07 марта 2012

Если есть пространство имен. XML:

<PersonInfo xmlns="http://mynamspace.lv/default">
    <Person ID="22">
        <Name>MyName</Name>
        <Profession>MyProfession</Profession>
    </Person>
</PersonInfo>

Тогда вы должны сделать что-то вроде этого:

WITH XMLNAMESPACES (DEFAULT 'http://mynamspace.lv/default')
SELECT
    @myXML.value('(PersonInfo/Person/@ID)[1]', 'nvarchar(100)') as ID,
    @myXML.value('(PersonInfo/Person/Name)[1]', 'nvarchar(100)') as Name,
    @myXML.value('(PersonInfo/Person/Profession)[1]', 'nvarchar(100)') as Profession;
...