在 XML header SQL 服务器中添加 header

Add header in a XML header SQL Server

我有这个问题

  Select  Top 1 codigo,Numero, fecha,transportista,chofer 
  from VIAJES_HEADER
     for xml path(''), ROOT ('CrearViaje4');

我得到了这个结果:

<CrearViaje4>
  <codigo>X03VAGDVDGR</codigo>
  <Numero>186714</Numero>
  <fecha>2018-02-22</fecha>
  <transportista>X03FGLGQDBM</transportista>
  <chofer>X03FHEXAWEW</chofer>
</CrearViaje4>

如何添加固定文本?我的意思是 XML 的 header 例如:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
        xmlns:unis="http://unisolutions.com.ar/">
          <soapenv:Header/>
          <soapenv:Body>
             <CrearViaje4 xmlns="http://unisolutions.com.ar/">
             <codigo>X03VAGDVDGR</codigo>
            <Numero>186714</Numero>
            <fecha>2018-02-22</fecha>
            <transportista>X03FGLGQDBM</transportista>
            <chofer>X03FHEXAWEW</chofer>
        </CrearViaje4>
     </soapenv:Body>
    </soapenv:Envelope>
    </soapenv:Envelope>

像往常一样SQL服务器 XQuery FLWOR 表达式可以方便地添加 SOAP 信封和命名空间。

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE(
    ID INT IDENTITY(1,1) PRIMARY KEY
    , codigo VARCHAR(20)
    , Numero INT
    , fecha DATE
    , transportista VARCHAR(20)
    , chofer VARCHAR(20)
);
INSERT INTO @tbl
VALUES
('X03VAGDVDGR', 186714, '2018-02-22', 'X03FGLGQDBM', 'X03FHEXAWEW')
-- DDL and sample data population, end

DECLARE @xml XML;

;WITH XMLNAMESPACES('http://unisolutions.com.ar/' AS unis)
SELECT  @xml = (
SELECT TOP(1) codigo, Numero, fecha, transportista, chofer 
FROM @tbl
FOR XML PATH('row'), TYPE, ROOT ('root'));

SELECT @xml.query('
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
        xmlns:unis="http://unisolutions.com.ar/">
          <soapenv:Header/>
          <soapenv:Body>
          <CrearViaje4 xmlns:unis="http://unisolutions.com.ar/">
{
for $x in /root/row
return $x/*
}</CrearViaje4>
</soapenv:Body>
</soapenv:Envelope>');