2010-12-03 8 views
0

私は型付きXMLフィールドを持つテーブルを持っています。典型的なXML形式は:このテーブルを仮定型付きxml in sql - これは可能ですか?

<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ごとに1つの行を選択されていますが、userごとに1つの行を探しています。試してください:

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

非常にありがとうございます。出来た。アプリノードに別のCROSS APPLYを追加すると、もう1つのCROSS APPLYも追加されました。再度、感謝します。 – stackoverflow