次のようなXMLがあると想像してください。
DECLARE @xml XML
SET @xml = CAST(N'<row><id>1</id><a>b</a></row><row><id>2</id><a>x</a></row>' AS XML)
あれは:
<row>
<id>1</id>
<a>b</a>
</row>
<row>
<id>2</id>
<a>x</a>
</row>
id要素は各行のキーであり、動的である可能性があるため、変数に格納します。
DECLARE @idname NVARCHAR(MAX)
SET @idname = N'id'
id値と行の内容の2つの列を持つ結果セットが必要です。私はこれを試しました:
SELECT node.value(N'xxx', N'NVARCHAR(MAX)') AS key, CAST(node.query(N'.') AS NVARCHAR(MAX)) AS value
FROM @xml.nodes(N'/row') AS roots(node)
問題は、xxxの代わりに値の中に何を入れるべきかわからないということです。私は次のようなことができるようになりたいです:
node.value(@idname, N'VARCHAR(MAX))
そのため、私の変数はXPath式として評価されますが、それは不可能です。代わりに使用する場合:
node.value(N'sql:variable("@idname")', N'NVARCHAR(MAX)')
評価する代わりに、@idname変数にある値を返します。
私が欲しいのは:
--------------------------------------
key |value
--------------------------------------
1 |<id>1</id><a>b</a>
2 |<id>2</id><a>x</a>
それで、これはまったく可能ですか?
ありがとう!