SSIS大数据集提取 [英] SSIS Large Dataset extraction

查看:107
本文介绍了SSIS大数据集提取的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道是否有人在SSIS中使用Foreach循环容器有任何经验?我已经设置并正常工作,但我每次通过foreach
循环时都试图不运行查询。这是我的过程1.运行查询以获取我的变量(事务的最后3个)2。通过foreach循环运行每个变量(因此有000-999)我也将最后3个传递给查询拉回一部分数据。这是一个巨大的
数据和拉/传1000个文件是好的,我只是不想运行查询1000次(每个文件1)。我想要的是运行一次查询并将数据分发到1000个文件中。我甚至可以运行10次。在一些较小的数据
集上,我实际上使用了Balance Data Distributor,但我必须为它创建10个不同的平面文件连接。我不想为这个项目创建1000个平面文件连接器..帮助!!!

推荐答案

Hi HuffDawg32,

Hi HuffDawg32,

如果您有 SQL Server 2012及更高版本,则您可以尝试以下技术。

If you have SQL Server 2012 and up, you can try the technique below.

Just在SSIS中循环并传递参数。文件连接需要一个表达式。

Just loop in SSIS and pass parameters. The file connection would need an expression.

DECLARE @tbl TABLE ( ID INT NOT NULL , [Description] VARCHAR(100) NOT NULL ); INSERT INTO @tbl VALUES (1, 'One') , (2, 'Two') , (3, 'Three') , (4, 'Four') , (5, 'Five') , (6, 'Six') , (7, 'Seven') , (8, 'Eight') , (9, 'Nine') , (10, 'Ten') , (11, 'Elleven') , (12, 'Twelve') , (13, 'Thirteen'); DECLARE @FileNo INT = 1 , @RowsPerFile INT , @RowTotal INT , @NumberOfFilesTotal DECIMAL = 3; -- To calculate # of rows per each file SET @RowTotal = (SELECT COUNT(*) FROM @tbl); SET @RowsPerFile = CEILING(@RowTotal/@NumberOfFilesTotal);

WHILE @FileNo< = @NumberOfFilesTotal
BEGIN
SELECT * FROM @tbl
ORDER BY ID
OFFSET(@FileNo - 1 )* @RowsPerFile ROWS
FETCH NEXT @RowsPerFile ROWS ONLY;

SET @FileNo + = 1;
END;

WHILE @FileNo <= @NumberOfFilesTotal BEGIN SELECT * FROM @tbl ORDER BY ID OFFSET (@FileNo - 1) * @RowsPerFile ROWS FETCH NEXT @RowsPerFile ROWS ONLY; SET @FileNo += 1; END;


这篇关于SSIS大数据集提取的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆