Xml
SQL Server 2012 で列をクエリしています。
パスを.value
メソッドに移動すると、結果がすべてのelement
インスタンスを返すわけではありません!
,c.value('(*/*/Visitors/Visitor/@Name)[1]', 'NVARCHAR(50)') AS Visitor
,c.value('(*/*/Senders/Sender/@Name)[1]', 'NVARCHAR(50)') As Sender
私はもともとnodes
メソッドを使用していましたが、Wildcard
パフォーマンスが殺されています
CROSS APPLY c.nodes('*') dd(d)
OUTER APPLY d.nodes(Visitors/Visitor) As ee(e)
OUTER APPLY d.nodes('Senders/Sender') ff(f)
(以下)のようなもので正しい結果を得ることができることはわかっていますが、.value
3つのシングルトンを宣言せずにメソッドでパスを使用してすべての要素の結果を返す方法はありますか、それとも.nodes
メソッドが複数の要素インスタンスを返す唯一の方法ですか?
ありがとう!
,c.value('(*/*/Visitors/Visitor/@Name)[1]', 'NVARCHAR(50)') AS Visitor
,c.value('(*/*/Visitors/Visitor/@Name)[2]', 'NVARCHAR(50)') AS Visitor2
,c.value('(*/*/Visitors/Visitor/@Name)[3]', 'NVARCHAR(50)') AS Visitor3
,c.value('(*/*/Senders/Sender/@Name)[1]', 'NVARCHAR(50)') As Sender
,c.value('(*/*/Senders/Sender/@Name)[2]', 'NVARCHAR(50)') As Sender2
,c.value('(*/*/Senders/Sender/@Name)[3]', 'NVARCHAR(50)') As Sender3