4

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)}>
')

それは幸せではありません。ハードコーディングされた要素名以外は好きではないようです。

計算された名前を持つ要素を返すにはどうすればよいですか?

4

2 に答える 2

5

マイクロソフトによると、

現在、計算された要素および属性コンストラクターの名前式の定数式のみがサポートされています。回避策は、属性名で cancat する動的 SQL を構築することです。

于 2011-11-18T11:11:27.530 に答える
0

計算要素コンストラクターを試してください:

SELECT @data.query('
for $attr in /*/@*
return element {fn:local-name($attr)} {fn:string($attr)}
')
于 2011-11-18T10:35:08.190 に答える