SQLServer 2008 R2 に次の XML データがあります。
DECLARE @data XML
SET @data = '<root attr1="val1" attr2="val2" attr3="val3"/>'
次のように、ルートから属性名のリストを取得し、それを要素のリストとして出力したいと思います。
<root>
<attr1>val1</attr1>
<attr2>val2</attr2>
<attr3>val3</attr3>
</root>
必要なものを取得するために FLWOR クエリをいじっています。これまでのところ、私はこれを持っています:
SELECT @data.query('
for $attr in /*/@*
return <test>{fn:string($attr)}</test>
')
これは問題なく、ほとんど必要なものですが、これを試してみると...
SELECT @data.query('
for $attr in /*/@*
return <{fn:local-name($attr)}>{fn:string($attr)}</{fn:local-name($attr)}>
')
それは幸せではありません。ハードコーディングされた要素名以外は好きではないようです。
計算された名前を持つ要素を返すにはどうすればよいですか?