所以我知道你是否有这个:
DECLARE @XML XML =
'<A>
<First>1</First>
<Second>2</Second>
<Third>3</Third>
</A>'
--I can get the name of the node but...
SELECT
Y.value('local-name(.)', 'varchar(50)') AS NodeName
FROM @XML.nodes('A/*') AS X(Y)
正如我之前在这样的线程中看到的好例子: How to get node name and values from an xml variable in t-sql
但是你可以走另一条路并使用结果集中的值来命名节点吗?我觉得我之前有过这样的事情,但是记不住这么想我会问。我对For XML
和其他SQL Server XML创建的排列很生疏。
继续上面的例子:
SELECT
Y.value('local-name(.)', 'varchar(50)') AS "ELEMENT-NODE" --Can I go from table to naming a node?
FROM @XML.nodes('A/*') AS X(Y)
--FOR XML AUTO, ELEMENTS -- NOPE
FOR XML PATH(''), ROOT('A')
是否有一些语法说:&#34;嘿,将值设为节点的名称&#34;?
答案 0 :(得分:2)
一般来说! - 无法从代码中设置列的别名。
解决方法有两种方法:
PIVOT
,如果您事先知道所有现有名称在真正的通用需求方面,两者都有严重的限制。
就像一个例子,上面的XML可以这样解决:
DECLARE @XML XML =
'<A>
<First>1</First>
<Second>2</Second>
<Third>3</Third>
</A>
';
DECLARE @colList NVARCHAR(MAX)=
(
SELECT STUFF(
(
SELECT ',''' + nd.value('.','nvarchar(max)') + ''' AS ' + QUOTENAME(nd.value('local-name(.)','nvarchar(max)'))
FROM @XML.nodes('/A/*') AS A(nd)
FOR XML PATH('')
),1,1,'')
);
EXEC(N'SELECT ' + @colList);
但是没有 one-for-everything 答案......