一部の要素がオプションである XML の列を含むテーブルがあります。この (非常に) 単純化された例では、すべての要素が存在する場合にコードが機能しますが、1 つ以上の要素が存在しない場合は何も得られません。(つまり、Y が null の 1 行ではなく 0 行)
私はさまざまな検索を通じてこの手法にたどり着いたので、確かにより良いアプローチがあるかもしれません. 最終的には、これをビューにしたいのですが(それがアプローチにとって重要な場合)、それを理解できるはずです。
declare @x XML = '<Root><A x="1"><B ySameName="2"/><C ySameName="3"/></A></Root>';
--declare @x XML = '<Root><A x="1"><C ySameName="3"/></A></Root>';
select EA.*, EB.*, EC.* from
(select c.node.value('@x', 'int') as X
from @x.nodes('//Root/A') AS c(node)) EA
,(select c.node.value('@ySameName', 'int') as YB
from @x.nodes('//Root/A/B') AS c(node)) EB
,(select c.node.value('@ySameName', 'int') as YC
from @x.nodes('//Root/A/C') AS c(node)) EC;
ローカル変数を使用して3つの選択としてこれを実行し、すべての変数を返すことができますが、それはかさばるようで、そのアプローチでどのようにビューを行うかわかりません。
ありがとう