首页 > 解决方案 > 从 SQL Server 创建 XML

问题描述

我需要一些帮助。我正在尝试使用此查询创建 XML:

WITH XMLNAMESPACES ('Envelope' AS soapenv) 
    SELECT * 
    FROM CrearViaje4
    JOIN transporte ON CrearViaje4.Cod_viaje = transporte.Cod_viaje
    JOIN depositoSalida ON transporte.Cod_viaje = depositoSalida.cod_viaje
    FOR XML AUTO, ROOT('soapenv:Body'), ELEMENTS

我得到了这个结果:

  <soapenv:Body xmlns:soapenv="Envelope">
      <CrearViaje4>
        <cod_viaje>A02VAIFHDXH</cod_viaje>
        <Empresa>Tradelog</Empresa>
        <transporte>
          <cod_viaje>A02VAIFHDXH</cod_viaje>
          <depositoSalida>
            <cod_viaje>A02VAIFHDXH</cod_viaje>
          </depositoSalida>
        </transporte>
      </CrearViaje4>
    </soapenv:Body>

为什么是transporte在桌子底下depositoSalida

我想得到这个结果,我该怎么办?

<soapenv:Body xmlns:soapenv="Envelope">
  <CrearViaje4>
    <cod_viaje>A02VAIFHDXH</cod_viaje>
    <Empresa>Tradelog</Empresa>
        <transporte>
           <cod_viaje>A02VAIFHDXH</cod_viaje>
        </transporte>
      <depositoSalida>
        <cod_viaje>A02VAIFHDXH</cod_viaje>
      </depositoSalida>
   </CrearViaje4>
</soapenv:Body>

标签: sql-serverxmlsqlxmlxml-comments

解决方案


你可以尝试加入depositoSalida on CrearViaje4.Cod_viaje = depositoSalida.cod_viaje

with xmlnamespaces ('Envelope' as soapenv)
select  *
from    CrearViaje4
join    transporte on CrearViaje4.Cod_viaje = transporte.Cod_viaje
join    depositoSalida on CrearViaje4.Cod_viaje = depositoSalida.cod_viaje
for xml auto, root('soapenv:Body'), elements

或使用子查询来获取您的额外数据

with xmlnamespaces ('Envelope' as soapenv)
select  *
        , (   select    *
              from      transporte
              where     CrearViaje4.Cod_viaje = transporte.Cod_viaje
              for xml path(''), type ) as transporte
        , (   select    *
              from      depositoSalida
              where     CrearViaje4.Cod_viaje = depositoSalida.Cod_viaje
              for xml path(''), type ) as depositoSalida
from    CrearViaje4
for xml auto, root('soapenv:Body'), elements

推荐阅读