【发布时间】:2017-05-02 17:04:46
【问题描述】:
我正在从 SQL Server 2008R2 创建 XML 输出。在我想要的xml结构下面。 (我会尽量说清楚,但如果您需要更多信息,请告诉我) 我遇到的问题是节点“RecordId”。该字段必须是整个 XML 中的一个运行序列,无论它位于哪个节点下。即,任何类别下节点“RecordId”的每次出现都将比前一个节点多 1 个值,即使它属于不同的类别。
我的主要限制是,我必须严格使用 T-SQL,仅 SSIS(可以使用 VB 或 C# 执行脚本任务)。
<Root>
<includedFileHeader>
<GenDatetime>2017-01-13T11:53:36</GenDatetime>
<OFtype>PD</OFtype>
<issuerID>ABCDE</issuerID>
**<RecordId>1</RecordId>**
</includedFileHeader>
<includedIssuerResult>
<issuerId>ABCDE</issuerId>
**<RecordId>2</RecordId>**
<includedPlanResult>
<planId>2</planId>
<insPlanId>123456789</insPlanId>
**<RecordId>4</RecordId>**
<ClassStatusType>
<Code>A</Code>
</ClassStatusType>
<includedDetails>
<DetailId>48</DetailId>
<DetailClmId>A3456H567</DetailClmId>
**<RecordId>4</RecordId>**
</includedDetails>
<includedDetails>
<DetailId>74</DetailId>
<DetailClmId>163364170257204</DetailClmId>
**<RecordId>5</RecordId>**
</includedDetails>
</includedPlanResult>
<includedPlanResult>
<planId>3</planId>
<insPlanId>343546337</insPlanId>
**<RecordId>6</RecordId>**
<ClassStatusType>
<Code>A</Code>
</ClassStatusType>
<includedDetails>
<DetailId>55</DetailId>
<DetailClmId>A78947J780</DetailClmId>
**<RecordId>7</RecordId>**
</includedDetails>
<includedDetails>
<DetailId>44</DetailId>
<DetailClmId>146545165A54</DetailClmId>
**<RecordId>8</RecordId>**
</includedDetails>
</includedIssuerResult>
</Root>
我什至无法在 T-sql 中实现关闭,但尝试在脚本任务中使用一些 VB/C# 代码,使用 XMLReader、Streamreader/writer,但没有任何效果。非常感谢您提供任何帮助。
【问题讨论】:
-
由于 XML 结构中的节点与位置无关,我将通过 (1) 构建基本 XML 结构,然后 (2) 使用脚本扫描结构的文本以查找任何开口需要 RecordId 值的块的标签(
<included**>标签),并将这些标签替换为由原始标签 +<RecordId>##</RecordId>组成的字符串。这应该完全符合您的需要。 -
显示您目前并尝试过的代码
标签: c# sql-server xml vb.net ssis