SSIS将一个表中的所有数据导出到多个文件中

Abb*_*428 -3 foreach ssis loops export

我有一个名为customers的表,其中包含大约1,000,000条记录.我需要所有的记录转移到递增的文件名如8号不同的平面文件cust01,cust02,cust03,cust04等.

我被告知这可以在SSIS中使用for循环完成.请有人给我一个指导,帮助我实现这一目标.

这背后的逻辑应该是"计数行数","除以8","将行数导出到8个文件中的每一个".

bil*_*nkc 7

对我来说,创建一个循环并计算数据量然后查询前N个段或其他内容的包将会更复杂.

相反,我只是创建一个包含9个连接管理器的包.一个到您的数据数据库(源),然后是8个相同的平面文件连接管理器,但使用FileName1,Filename2等模式.定义第一个FFCM后,只需复制,粘贴和编辑实际文件名.

将数据流任务拖到控制流上并将其连接为OLE/ADO/ODBC源.使用查询,不要选择表,因为您需要对数据进行分区.我假设你的底层RDBMS支持ROW_NUMBER()函数的概念.您的源查询将是

SELECT 
    MT.*
,   (ROW_NUMBER() OVER (ORDER BY (SELECT NULL))) % 8 AS bucket
FROM 
    MyTable AS MT;
Run Code Online (Sandbox Code Playgroud)

该查询将拉回所有数据,并从1中分配一个单调递增的数字,ROWCOUNT然后我们将模数(除数后的余数)运算符应用于.通过将生成的值修改为8,可以保证我们只能获得0到7的值,包括端点.

你可能会开始对这里使用的不同数字基数(基数0,基数1)感到不安,我知道我是.

将您的源连接到条件分割.使用该bucket列将数据分段为不同的流.我建议您将存储桶1映射到文件1,存储桶2映射到文件2 ...最后使用存储桶0映射到文件8.这样,我只需处理端点对齐,而不是一切都是台阶.

将每个流连接到一个平面文件目的地,繁荣就是炸药.

  • 所以,问题已经解决,但问题的答案是另一个问题?那是一个F. (3认同)