みんなおはよう、
FOR XML PATH を使用して .xml ファイルを出力する大きなクエリがあります。基本的にルートを表すメインの選択があります。
select *
from tbl
for xml path ('root'),elements xsinil
次に、このメイン選択内にネストされた選択を続けます。
select
(
select null [level1],
'2' [level2]
from tbl
for xml path('nested1'),type
),
(
select null [level1],
'2' [level2]
from tbl
for xml path('nested2'),type
)
for xml path('root'),elements xsinil
ただし、for xml パスに配置された要素 xsinil 引数は、含まれるサブクエリには影響しません。つまり、Level1 要素は単なる閉じたタグです。これを xsi:nil="true" として表示する必要があります。
要素 xsinil 引数を for xml パスステートメントに追加することでこれを実現できます。
for xml path('nested1'),type,elements xsinil
これの問題は、名前空間の宣言がサブクエリ レベルで繰り返されることです。
要素 xsinil を使用する例はたくさんありますが、namespace 宣言を繰り返さずにサブクエリに適用する例はありません。
確認するために、次の出力を探しています。
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<nested1>
<level1 xsi:nil="true">
<level2>2</level2>
</nested1>
<nested2>
<level1 xsi:nil="true">
<level2>2</level2>
</nested2>
</root>
あなたが助けてくれることを願っています!