2010-12-03 26 views
0

我有一个带有键入的XML字段的表。典型的XML格式是:在sql中键入xml - 这可能吗?

<root> 
    <users> 
     <user name="John Doe" /> 
     <user name="Alexander" /> 
    </users> 
    <apps> 
     <app name="Office 2010" /> 
     <app name="SQL Server 2005" /> 
    <apps> 
</root> 

假设这表有25行与所述用户不同的值和应用程式的元素,是有一种方法:

  1. 检索在/根的所有用户的列表/ users元素的所有记录。
  2. 检索所有记录的所有用户+应用程序的列表。

此行上的SQL工作正常,但只给我第一个用户名。

SELECT xtbl.col1.value('(user/@name)[1]', 'varchar(100)') 
FROM mytable 
    CROSS APPLY xmlcol.nodes('/root/users') AS xtbl(col1) 

回答

1

nodes功能每users选择一个行,但你正在寻找每user一行。试试:

SELECT xtbl.col1.value('(@name)[1]', 'varchar(100)') 
FROM mytable 
    CROSS APPLY xmlcol.nodes('/root/users/user') AS xtbl(col1) 
+0

太棒了 - 谢谢。有效。在应用程序节点上添加另一个CROSS APPLY也为第二个应用程序带来了窍门。再次感谢。 – stackoverflow 2010-12-03 15:00:53