1
想象我有一些XML,看起來像這樣:在SQL Server中轉換一個XML變量的結果集2008
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值和行的內容。 我嘗試這樣做:
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>
所以,這是不可能的?
謝謝!
Mikael:你是男人!謝謝! 順便說一句,我也發佈到http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/04e8c48d-a400-460f-a4dc-5d524405decf,所以,你也可以在那裏回答! – 2012-07-25 17:55:55
不客氣。 – 2012-07-25 17:56:35