我在使用FOR XML PATH
时遇到一些问题。我的情况是:
我运行了如下脚本,属性CCY
和AMOUNT
的值合并到同一个节点:
Script 1:
SELECT 'USD' AS 'Amount/@Ccy',
123000 AS Amount,
'Foo' AS Foo
FOR XML PATH('root'), TYPE;
结果 1:root
节点中只有 1 个 AMOUNT
节点
<root>
<Amount Ccy="USD">123000</Amount>
<Foo>Foo</Foo>
</root>
Script 2: I change the order of
Foo
to the middle, and the result is wrong
SELECT 'USD' AS 'Amount/@Ccy',
'Foo' AS Foo,
123000 AS Amount
FOR XML PATH('root'), TYPE;
结果2:根节点中有2个节点AMOUNT
<root>
<Amount Ccy="USD" />
<Foo>Foo</Foo>
<Amount>123000</Amount>
</root>
所以我的问题是:如何将它们保持在同一个节点而不将它们放在一起。谢谢
最佳答案
这是为了工作......
引擎沿着列列表向下移动,打开一个元素,填充嵌套元素,找到一个新元素(哦!我必须关闭最后一个元素!)...等等。
属性必须位于包含元素之前。顺序很重要!
尝试一下:
--相同的名称:你可能会感到惊讶
SELECT 1 AS [SomeElement]
,2 AS [SomeElement]
FOR XML PATH('SomeTag'),ROOT('root');
--之间的不同名称
SELECT 1 AS [SomeElement]
,'in between' AS [SomeOther]
,2 AS [SomeElement]
FOR XML PATH('SomeTag'),ROOT('root');
--不同的元素 - 嗯 - 不存在(您也可以使用 NULL)
SELECT 1 AS [SomeElement]
,''
,2 AS [SomeElement]
FOR XML PATH('SomeTag'),ROOT('root');
--你认为这里会出现什么?
SELECT 'blah' AS [SomeElement/@TheAttribute]
,1 AS [SomeElement]
,2 AS [SomeElement]
FOR XML PATH('SomeTag'),ROOT('root');
--...这里呢?
SELECT 'blah' AS [SomeElement/@TheAttribute]
,1 AS [SomeElement]
,''
,'blub' AS [SomeElement/@TheAttribute]
,2 AS [SomeElement]
FOR XML PATH('SomeTag'),ROOT('root');
--最后,这是你的例子(原则上)
SELECT 1 AS [SomeElement]
,'in between' AS [SomeOther]
,'blub' AS [SomeElement/@TheAttribute]
FOR XML PATH('SomeTag'),ROOT('root');
--并且-只是为了好玩! - 也试试这个
SELECT 1 AS [SomeElement]
,NULL
,'blub' AS [SomeElement/@TheAttribute]
FOR XML PATH('SomeTag'),ROOT('root');
关于sql - 对于 XML 路径 : How to keep Attribute and Value in the same node,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50306483/