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