我的sproc中有以下选择查询:
select node1 =
(
(select innernode1 =
(
select var1 =
(
select
Val = 'XXX',
spec = 'yyy'
FOR XML PATH(''), TYPE
)
FOR XML PATH('var1'), TYPE
)
),
(select innernode1 =
(
select var2 =
(
select
Val = 'XXX',
spec = 'yyy'
FOR XML PATH(''), TYPE
)
FOR XML PATH('var2'), TYPE
)
)
)
期望/预期的XML输出:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<node1>
<innernode1>
<var1>
<Spec>yyy</Spec>
<Val>xxx</Val>
</var1>
</innernode1>
<innernode2>
<var2>
<Spec>yyy</Spec>
<Val>xxx</Val>
</var2>
</innernode2>
</node1>
</root>
但是,选择查询会在&#39;,&#39;附近抛出错误的语法。&#39;错误和&#39;)&#39;附近的语法不正确 任何帮助将非常感激!
答案 0 :(得分:2)
此FOR XML
语句无效语法...
你想要实现什么目标?数据是来自表吗?
您想获得JSON,但是您正在创建XML?
一般提示:这可能仅适用于样本数据,但是 - 如果这是真实数据 - 则应避免名称编号。两者都应该只是innernode1
,而不是innernode2
和innernode
,而1和2要么取自他们的位置,要么作为属性/值放置。
我的魔法水晶球告诉我,你正在寻找这样的东西:
SELECT
innernode1 =
(
SELECT
Spec = 'yyy',
Val = 'XXX'
FOR XML PATH('var1'), TYPE
)
,innernode2 =
(
SELECT
Spec = 'yyy',
Val = 'XXX'
FOR XML PATH('var2'), TYPE
)
FOR XML PATH('node1'),ROOT('root');
结果
<root>
<node1>
<innernode1>
<var1>
<Spec>yyy</Spec>
<Val>XXX</Val>
</var1>
</innernode1>
<innernode2>
<var2>
<Spec>yyy</Spec>
<Val>XXX</Val>
</var2>
</innernode2>
</node1>
</root>
FOR JSON
声明(read here the documentation)看起来非常相似,但我目前无法测试。这需要SQL-Server-2017 +