Sql server XML路径错误

Sql server XML路径错误,sql-server,xml,Sql Server,Xml,我的存储过程中有以下选择查询: select node1 = ( (select innernode1 = ( select var1 = ( select Val = 'XXX', spec = 'yyy' FOR XML PATH(''), TYPE

我的存储过程中有以下选择查询:

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>

yyy
xxx
yyy
xxx
但是select查询正在抛出“附近语法错误”、“错误”和“附近语法错误”。

任何帮助都将不胜感激

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>

yyy
XXX
yyy
XXX

JSON的
语句()看起来非常相似,但我目前无法测试它。这需要SQL-Server-2017+

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>

yyy
XXX
yyy
XXX

JSON的
语句()看起来非常相似,但我目前无法测试它。这需要SQL-Server-2017+

哪个版本的SQL Server?SQL Server 2014。编辑了以下问题:SQL Server的哪个版本?SQL Server 2014。现在编辑问题我希望我的sql select生成如上所述的XML。稍后我将把该XML转换为JSON@Rick更新了我的答案。生成的XML与您在问题中的陈述完全相同我希望我的sql select生成如上所述的XML。稍后我将把该XML转换为JSON@Rick更新了我的答案。生成的XML与您在问题中陈述的完全相同