如何使用SSIS从6471行Excel表中每次仅加载50条记录到数据表
在SSIS中实现Excel数据分批(每次50条)加载到数据表的方案
核心逻辑
通过SSIS的循环容器+行号筛选,实现每次加载固定数量的Excel记录。由于Excel原生不支持数据库式分页,我们用ROW_NUMBER()标记行号,再通过循环变量控制每次加载的行范围。
步骤1:创建包变量
在SSIS包中添加以下变量(作用域设为整个包):
CurrentRowStart:int类型,初始值1,标记每批数据的起始行号BatchSize:int类型,固定设为50,定义单批加载量TotalRows:int类型,直接赋值6471(已知总行数),也可动态获取(见步骤2)
步骤2:动态获取总行数(可选)
如果需要适配任意行数的Excel,添加执行SQL任务:
- 连接Excel数据源,执行查询:
SELECT COUNT(*) FROM [Sheet1$]
- 将查询结果赋值给
TotalRows变量,替代硬编码的6471
步骤3:配置For循环容器
拖入For循环容器,设置循环规则:
- 初始化:
@CurrentRowStart = 1 - 循环条件:
@CurrentRowStart <= @TotalRows - 每次循环后:
@CurrentRowStart = @CurrentRowStart + @BatchSize
步骤4:循环内配置数据流任务
在For循环中添加数据流任务,配置数据抽取与加载:
- Excel源:
- 数据访问模式选择
SQL命令,编写带行号筛选的查询:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS RowNum FROM [Sheet1$] ) t WHERE t.RowNum BETWEEN ? AND ?- 进入参数映射:将
CurrentRowStart映射到第一个参数,@CurrentRowStart + @BatchSize -1映射到第二个参数(确保取满50条,比如1-50、51-100)
- 数据访问模式选择
- OLE DB目标:连接目标数据库表,完成字段映射,确保源和目标字段匹配
步骤5:处理收尾批次
当最后一批数据不足50条时(比如6451-6471共21条),筛选条件会自动匹配到最后一行,无需额外修改逻辑。
关键注意事项
- 确保Excel版本支持
ROW_NUMBER()函数(Office 2010及以上均可) - Excel源连接管理器需勾选“第一行包含列名”(如果工作表有表头)
- 测试时可临时把
BatchSize设为5,验证循环和筛选逻辑正确后再改回50
内容的提问来源于stack exchange,提问作者Subrhamanya Gupta
相关产品推荐
相关产品推荐

