【问题标题】:How to Extract data from xml column in sql 2008如何从 sql 2008 中的 xml 列中提取数据
【发布时间】:2012-03-07 11:11:07
【问题描述】:

我有一个带有 xml 类型列的表。我必须从 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>

请帮我提取数据。提前致谢。

谢谢, 达西克。 s.darthick@gmail.com

【问题讨论】:

标签: sql-server xml sql-server-2008 xquery-sql


【解决方案1】:
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

【讨论】:

    【解决方案2】:

    如果有命名空间。 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多