任何有关以下内容的帮助将不胜感激。
下面是我的表结构:
CREATE TABLE [dbo].[XML_EXAMPLE]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[Account Code] [varchar](15) NULL,
[Description] [varchar](50) NULL,
[Analysis 1 Code] [varchar](15) NULL,
[Analysis 2 Code] [varchar](15) NULL,
[Analysis 3 Code] [varchar](15) NULL,
[Analysis 4 Code] [varchar](15) NULL,
[Analysis 5 Code] [varchar](15) NULL,
[Analysis 6 Code] [varchar](15) NULL,
[Analysis 7 Code] [varchar](15) NULL
) ON [PRIMARY]
GO
在该表中,我将插入 4 行。两行的分析 1 代码为 1000,另外两行的分析 1 代码为 2000。
INSERT INTO [dbo].[XML_EXAMPLE] ([Analysis 1 Code])
VALUES ('1000'), ('1000'), ('2000'), ('2000')
我试图从 SQL 中得到的是一种如下所示的 XML 格式 - 请注意,如果您查看 CompCode,每个 Analysis 1 Code 都有它自己的“文档”元素。每个 Document 元素都有一个 Header 和 Item(表中的行)。
<DocumentBatch>
<Document>
<Header>
<DocType>HR</DocType>
<CompCode>1000</CompCode>
<DocDate>20211018</DocDate>
<PostDate>20211018</PostDate>
<RefDocNo>Civica Cx Rents</RefDocNo>
<Text>Civica Cx Rents</Text>
</Header>
<Item>
<ItemNo>1</ItemNo>
<GIAccNo>GIAccNo</GIAccNo>
<TaxCode>TaxCode</TaxCode>
<Amount>Amount</Amount>
<Currency>Currency</Currency>
<Text>Text</Text>
<CostCenter>CostCenter</CostCenter>
<RefKey1>RefKey1</RefKey1>
<RefKey2>RefKey2</RefKey2>
<RefKey3>RefKey3</RefKey3>
</Item>
<Item>
<ItemNo>2</ItemNo>
<GIAccNo>GIAccNo</GIAccNo>
<TaxCode>TaxCode</TaxCode>
<Amount>Amount</Amount>
<Currency>Currency</Currency>
<Text>Text</Text>
<CostCenter>CostCenter</CostCenter>
<RefKey1>RefKey1</RefKey1>
<RefKey2>RefKey2</RefKey2>
<RefKey3>RefKey3</RefKey3>
</Item>
</Document>
<Document>
<Header>
<DocType>HR</DocType>
<CompCode>2000</CompCode>
<DocDate>20211018</DocDate>
<PostDate>20211018</PostDate>
<RefDocNo>Civica Cx Rents</RefDocNo>
<Text>Civica Cx Rents</Text>
</Header>
<Item>
<ItemNo>1</ItemNo>
<GIAccNo>GIAccNo</GIAccNo>
<TaxCode>TaxCode</TaxCode>
<Amount>Amount</Amount>
<Currency>Currency</Currency>
<Text>Text</Text>
<CostCenter>CostCenter</CostCenter>
<RefKey1>RefKey1</RefKey1>
<RefKey2>RefKey2</RefKey2>
<RefKey3>RefKey3</RefKey3>
</Item>
<Item>
<ItemNo>2</ItemNo>
<GIAccNo>GIAccNo</GIAccNo>
<TaxCode>TaxCode</TaxCode>
<Amount>Amount</Amount>
<Currency>Currency</Currency>
<Text>Text</Text>
<CostCenter>CostCenter</CostCenter>
<RefKey1>RefKey1</RefKey1>
<RefKey2>RefKey2</RefKey2>
<RefKey3>RefKey3</RefKey3>
</Item>
</Document>
</DocumentBatch>
我编写的代码只处理其中一个分析 1 代码。如果你要运行这段代码——你会看到它只会给我想要的一半。
SELECT
(SELECT
(SELECT DISTINCT
'HR' DocType,
x.[Analysis 1 Code] CompCode,
CONVERT(varchar(8), GETDATE(), 112) DocDate,
CONVERT(varchar(8), GETDATE(), 112) PostDate,
'Civica Cx Rents' RefDocNo,
'Civica Cx Rents' Text
FROM
XML_EXAMPLE x
WHERE
x.[Analysis 1 Code] = '1000'
FOR XML path('Header'), TYPE),
(SELECT
ROW_NUMBER() OVER (ORDER BY id) 'ItemNo',
'GIAccNo' 'GIAccNo',
'TaxCode' 'TaxCode',
'Amount' 'Amount',
'Currency' 'Currency',
'Text' 'Text',
'CostCenter' 'CostCenter',
'RefKey1' 'RefKey1',
'RefKey2' 'RefKey2',
'RefKey3' 'RefKey3'
FROM
XML_EXAMPLE x
WHERE
x.[Analysis 1 Code] = '1000'
FOR XML PATH('Item'), TYPE)
FOR XML PATH('Document'), TYPE, ROOT ('DocumentBatch')) row
我的结果 - 请注意,我只有 1 个带有标题和 1000 项的 Document 元素。
<DocumentBatch>
<Document>
<Header>
<DocType>HR</DocType>
<CompCode>1000</CompCode>
<DocDate>20211018</DocDate>
<PostDate>20211018</PostDate>
<RefDocNo>Civica Cx Rents</RefDocNo>
<Text>Civica Cx Rents</Text>
</Header>
<Item>
<ItemNo>1</ItemNo>
<GIAccNo>GIAccNo</GIAccNo>
<TaxCode>TaxCode</TaxCode>
<Amount>Amount</Amount>
<Currency>Currency</Currency>
<Text>Text</Text>
<CostCenter>CostCenter</CostCenter>
<RefKey1>RefKey1</RefKey1>
<RefKey2>RefKey2</RefKey2>
<RefKey3>RefKey3</RefKey3>
</Item>
<Item>
<ItemNo>2</ItemNo>
<GIAccNo>GIAccNo</GIAccNo>
<TaxCode>TaxCode</TaxCode>
<Amount>Amount</Amount>
<Currency>Currency</Currency>
<Text>Text</Text>
<CostCenter>CostCenter</CostCenter>
<RefKey1>RefKey1</RefKey1>
<RefKey2>RefKey2</RefKey2>
<RefKey3>RefKey3</RefKey3>
</Item>
</Document>
</DocumentBatch>
我一辈子都做不到的是——
我如何
<?xml version="1.0" encoding="iso8859-1"?>附加到我生成的 XML 格式的顶部 - 因为我将通过 SSIS 包进行设置。我在我的代码中放置在哪里,以便它最终导出 1000 和 2000,因为我正在努力将它放置在哪里。我是否错误地构建了我的代码以实现我想要实现的目标?
非常感谢