如何格式化SQL查询的XML结果

时间:2014-05-12 09:07:44

标签: sql sql-server xml

上午,

我正在尝试从SQL查询格式化一些XML输出,我正在努力。我目前拥有的SQL类似于此,我已经更改了表和列的名称:

SELECT *
FROM ReportTable p with (nolock)
     LEFT OUTER JOIN Table1 s with (nolock) on s.UID = p.UID
     LEFT OUTER JOIN Table2 o with (nolock) on o.UID = p.UID
     LEFT OUTER JOIN Table3 ct with (nolock) on ct.UID = p.UID
WHERE p.UID = 1194
FOR XML AUTO, ELEMENTS

这给了我以下输出:

<p>
  <UID>1194</UID>
  <pCol1>Value</pCol1>
  <pCol2>Value</pCol2>
  <pCol3>Value</pCol4>
  <pCol4>Value</pCol4>
  <s>
     <UID>1194</UID>
     <sCol1>Value</sCol1>
     <sCol2>Value</sCol2>
     <sCol3>Value</sCol3>
     <o>
        <ct>
           <UID>1194</UID>
           <ctCol1>Value</ctCol1>
           <ctCol2>Value</ctCol2>
        </ct>
     </o>
  </s>
</p>

这不是我所追求的,我真正需要的是:

<p>
    <UID>1194</UID>
    <pCol1>Value</pCol1>
    <pCol2>Value</pCol2>
    <pCol3>Value</pCol4>
    <pCol4>Value</pCol4>
    <s>
        <UID>1194</UID>
        <sCol1>Value</sCol1>
        <sCol2>Value</sCol2>
        <sCol3>Value</sCol3>
    </s>
    <o>
    </o>
    <ct>
        <UID>1194</UID>
        <ctCol1>Value</ctCol1>
        <ctCol2>1</ctCol2>
    </ct>
</p>

是否只是我必须更改我的SQL以便它使用子查询,或者我错过了一些令人惊讶的SQL语句?

理想情况下,该解决方案还需要适用于2000年以上的SQL Server版本。

感谢。

1 个答案:

答案 0 :(得分:0)

使用XML PATH

SELECT 
    p.*, 
    s.sCol1 as 's/sCol1', 
    o.oCol1 as 'o/oCol1'
FROM p 
     LEFT OUTER JOIN s on s.UID = p.UID
     LEFT OUTER JOIN o on o.UID = p.UID
FOR XML PATH

http://technet.microsoft.com/en-us/library/bb522647.aspx