2012-03-07 68 views
1

我有一个xml类型的列表。我必须从xml列中提取值。我已经尝试了所有可能的方法,我不能成功。请在下面找到xml数据的示例。如何在sql 2008中从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。 [email protected]

+0

经过这些链接[http://stackoverflow.com/questions/2148197/extracting-data-from-xml-in- sql-server-column]和[http://stackoverflow.com/questions/6070256/the-best-way-to-extract-data-from-xml-with-xquery] – Java 2012-03-07 11:15:54

+0

这似乎不是XML数据; - )。请张贴实际的XML或其片段,并告诉我们需要提取哪些元素。 – 2012-03-07 11:17:19

回答

2
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

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