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