将数据添加到 FOR XML PATH SQL SERVER 的结果

Add data to result of FOR XML PATH SQL SERVER

我有一个生成 XML 的查询,完全符合我的要求:

SELECT *
FROM [staging].[vw_mydata] 
FOR XML PATH('DOCUMENT')

此代码产生此输出:

<DOCUMENT>
      <BRON>Bulk Import</BRON>
      <INDEXEERDATUM>2015-07-30</INDEXEERDATUM>
      <ITEMVALUE1>ITEMVALUE1</ITEMVALUE1>
      <ITEMVALUE2>ITEMVALUE2</ITEMVALUE2>
      <ITEMVALUE3>ITEMVALUE3</ITEMVALUE3>
      <ITEMVALUE4>ITEMVALUE4</ITEMVALUE4>
      <ITEMVALUE5>ITEMVALUE5</ITEMVALUE5>
      <ITEMVALUE6>2015-07-30</ITEMVALUE6>
      <ITEMVALUE7>ITEMVALUE7</ITEMVALUE7>
      <ITEMVALUE8></ITEMVALUE8>
      <ITEMVALUE9></ITEMVALUE9>
      <ITEMVALUE10></ITEMVALUE10>
      <ITEMVALUE11>ITEMVALUE11</ITEMVALUE11>
</DOCUMENT>
      <BRON>Bulk Import</BRON>
      <INDEXEERDATUM>2015-07-30</INDEXEERDATUM>
      <ITEMVALUE1>ITEMVALUE1</ITEMVALUE1>
      <ITEMVALUE2>ITEMVALUE2</ITEMVALUE2>
      <ITEMVALUE3>ITEMVALUE3</ITEMVALUE3>
      <ITEMVALUE4>ITEMVALUE4</ITEMVALUE4>
      <ITEMVALUE5>ITEMVALUE5</ITEMVALUE5>
      <ITEMVALUE6>2015-07-30</ITEMVALUE6>
      <ITEMVALUE7>ITEMVALUE7</ITEMVALUE7>
      <ITEMVALUE8></ITEMVALUE8>
      <ITEMVALUE9></ITEMVALUE9>
      <ITEMVALUE10></ITEMVALUE10>
      <ITEMVALUE11>ITEMVALUE11</ITEMVALUE11>
</DOCUMENT>

但是,我需要在这个结果前后添加信息。

以下必须在查询结果之前。这部分是固定的,不会改变。

<?xml version="1.0"?>
<DOCUMENTS>
    <VERSION>2.0</VERSION>
    <LICENTIEHOUDER>Henrov</LICENTIEHOUDER>
    <XTN>BulkImport</XTN>
    <ARCHIEFNAAM>Name</ARCHIEFNAAM>
    <ITEMLABEL1>Label1</ITEMLABEL1>
    <ITEMLABEL2>Label2</ITEMLABEL2>
    <ITEMLABEL3>Label3</ITEMLABEL3>
    <ITEMLABEL4>Label4</ITEMLABEL4>
    <ITEMLABEL5>Label5</ITEMLABEL5>
    <ITEMLABEL6>Label6</ITEMLABEL6>
    <ITEMLABEL7>Label7</ITEMLABEL7>
    <ITEMLABEL8>Label8</ITEMLABEL8>
    <ITEMLABEL9>Label9</ITEMLABEL9>
    <ITEMLABEL10>Label0</ITEMLABEL10>
    <ITEMLABEL11>Label1</ITEMLABEL11>
    <ITEMLABEL12>Label2</ITEMLABEL12>
    <ITEMLABEL13>Label3</ITEMLABEL13>
    <ITEMLABEL14>Label4</ITEMLABEL14>
    <ITEMLABEL15>Label5</ITEMLABEL15>
    <ITEMLABEL16>Label6</ITEMLABEL16>
    <ITEMLABEL17>Label7</ITEMLABEL17>`

</DOCUMENTS> 需要添加到末尾,这样整个结果看起来像这样:

<?xml version="1.0"?>
<DOCUMENTS>
<VERSION>2.0</VERSION>
<LICENTIEHOUDER>Henrov</LICENTIEHOUDER>
<XTN>BulkImport</XTN>
<ARCHIEFNAAM>Name</ARCHIEFNAAM>
<ITEMLABEL1>Label1</ITEMLABEL1>
<ITEMLABEL2>Label2</ITEMLABEL2>
<ITEMLABEL3>Label3</ITEMLABEL3>
<ITEMLABEL4>Label4</ITEMLABEL4>
<ITEMLABEL5>Label5</ITEMLABEL5>
<ITEMLABEL6>Label6</ITEMLABEL6>
<ITEMLABEL7>Label7</ITEMLABEL7>
<ITEMLABEL8>Label8</ITEMLABEL8>
<ITEMLABEL9>Label9</ITEMLABEL9>
<ITEMLABEL10>Label0</ITEMLABEL10>
<ITEMLABEL11>Label1</ITEMLABEL11>
<ITEMLABEL12>Label2</ITEMLABEL12>
<ITEMLABEL13>Label3</ITEMLABEL13>
<ITEMLABEL14>Label4</ITEMLABEL14>
<ITEMLABEL15>Label5</ITEMLABEL15>
<ITEMLABEL16>Label6</ITEMLABEL16>
<ITEMLABEL17>Label7</ITEMLABEL17>
<DOCUMENT>
<BRON>Bulk Import</BRON>
<INDEXEERDATUM>2015-07-30</INDEXEERDATUM>
<ITEMVALUE1>ITEMVALUE1</ITEMVALUE1>
<ITEMVALUE2>ITEMVALUE2</ITEMVALUE2>
<ITEMVALUE3>ITEMVALUE3</ITEMVALUE3>
<ITEMVALUE4>ITEMVALUE4</ITEMVALUE4>
<ITEMVALUE5>ITEMVALUE5</ITEMVALUE5>
<ITEMVALUE6>2015-07-30</ITEMVALUE6>
<ITEMVALUE7>ITEMVALUE7</ITEMVALUE7>
<ITEMVALUE8></ITEMVALUE8>
<ITEMVALUE9></ITEMVALUE9>
<ITEMVALUE10></ITEMVALUE10>
<ITEMVALUE11>ITEMVALUE11</ITEMVALUE11>
</DOCUMENT>
<BRON>Bulk Import</BRON>
<INDEXEERDATUM>2015-07-30</INDEXEERDATUM>
<ITEMVALUE1>ITEMVALUE1</ITEMVALUE1>
<ITEMVALUE2>ITEMVALUE2</ITEMVALUE2>
<ITEMVALUE3>ITEMVALUE3</ITEMVALUE3>
<ITEMVALUE4>ITEMVALUE4</ITEMVALUE4>
<ITEMVALUE5>ITEMVALUE5</ITEMVALUE5>
<ITEMVALUE6>2015-07-30</ITEMVALUE6>
<ITEMVALUE7>ITEMVALUE7</ITEMVALUE7>
<ITEMVALUE8></ITEMVALUE8>
<ITEMVALUE9></ITEMVALUE9>
<ITEMVALUE10></ITEMVALUE10>
<ITEMVALUE11>ITEMVALUE11</ITEMVALUE11>
</DOCUMENT>
</DOCUMENTS>

这需要导出为 XML 文件。

我尝试做 SELECT 'text in front' + (select for xml) + 'text after' 但结果不理想:所有 <> 都被 &lt en &gt 替换,有效地破坏了我的xml.

所以基本上:如何在 FOR XML 查询结果的开头和结尾添加信息?

只需为文档创建一个子查询。您需要使用 type 来防止 XML 标签转义。

SELECT 
'2.0' AS [VERSION],
'Henrov' AS [LICENTIEHOUDER],
-- Add all other fields.
(
    SELECT *
    FROM [staging].[vw_mydata] 
    FOR XML PATH('DOCUMENT'), type
)
FOR XML PATH('DOCUMENTS')