首页 > 解决方案 > 基于发票行项目检查的 SSIS SQL 拆分文件

问题描述

我有一个 SQL 表,其中包含以下详细信息。发票 ID 及其各自的详细信息。每个发票可以有单行或多行。

在此处输入图像描述

我的要求是我需要拆分多个 CSV 文件。我可以使用SSIS轻松做到这一点。

但是假设一张发票有 4 行,那么它应该被捕获在单个文件中。不是一个文件中的 2 行,另一个文件中的另外两行。这必须在 SSIS 中导出时处理

例如,给定的数据有 20 条记录,因此如果我将每个记录拆分为 10 条记录,那么将提取 2 个文件。但是,如果您在第 8 行中看到发票 105 有 4 行。因此它应该移动到第二个文件。第一个文件将有直到发票 104 达到 8 行(这很好)。这对我来说似乎是一项非常棘手的任务。我将不胜感激有关如何实现这一目标的任何意见。

标签: sqlsql-serverssis

解决方案


这是一个很好的问题,这可能是客户方面的要求,也可能是我们亲爱的经理的要求。我有一个解决方案 -

Sql查询你自己我给出的逻辑。

1-当该表中没有记录时,Foreachloop将停止

Declare @cnt int Set @cnt=(Select count(*) from your_table) IF @cnt>0

2-首先,通过使用 Row_Number() 函数按函数组划分记录,其中大于或等于 4,然后使用.Invoice Id and countInvoice IdcountExecute SQL Task

3-根据 Row_Number() 找到记录,将其分配给一个变量,然后从表中删除这些记录,仅Execute SQL Task作为一个完整的结果集。下一次迭代,这些记录将不存在。

4-将带有时间戳的变量中的数据插入 Excel 工作表。

5-在下一次迭代中,它将Invoice Id根据 Row_Number 选择具有 4 条或多于 4 条记录的下一个。

这个循环的 6-Out side 我们将把所有Invoice Id超过 4 条记录插入到带有时间戳的 Excel 工作表中。

我已经创建了类似的项目,其中客户想要的数据应该根据城市进行分叉,这与此类似,目前我的机器上没有安装 SQL Server 和 Visual Studio 数据工具,否则无法给你确切的组件,请尝试逻辑,一旦您有任何问题,请告诉我。


推荐阅读