使用FOR XML PATH
时遇到问题。我的情况是:
我运行了如下脚本,属性CCY
和AMOUNT
的值合并到同一个节点:
脚本1:
SELECT 'USD' AS 'Amount/@Ccy',
123000 AS Amount,
'Foo' AS Foo
FOR XML PATH('root'), TYPE;
结果1:AMOUNT
节点中只有1个root
节点
<root>
<Amount Ccy="USD">123000</Amount>
<Foo>Foo</Foo>
</root>
脚本2:我将
Foo
的顺序更改为中间,结果是 错
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>
所以我的问题是:如何将它们保存在同一节点中而不将它们放在一起。感谢
答案 0 :(得分:1)
这是为了工作......
引擎沿着列列表向下移动,打开一个元素,填充嵌套元素,找到一个新元素(哦!我必须关闭最后一个元素!)......等等。
属性必须在包含元素之前声明。订单很重要!
尝试一下:
- 相同的名字:你可能会感到惊讶
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');