0

XmlSQL 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)

(以下)のようなもので正しい結果を得ることができることはわかっていますが、.value3つのシングルトンを宣言せずにメソッドでパスを使用してすべての要素の結果を返す方法はありますか、それとも.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
4

2 に答える 2

2

への呼び出しは.value()、定義により単一の値のみを返します。

ノードのリストを列挙する必要がある場合は、.nodes()- を使用してください。

ただし、使用は避けてください.nodes(*)-それはパフォーマンスの単なるキラーです-.nodes()呼び出しでXPathを具体的にする必要があります

于 2013-05-21T17:05:26.387 に答える