SSIS包执行成功却导出仅含表头的空CSV文件求助
排查步骤
1. 验证核心数据是否存在
- 直接在目标数据库执行第一步的SQL语句:
如果truncate table mytable; insert into mytable select * from myview; select count(*) from mytable;count(*)返回0,说明myview本身没有数据,问题出在上游数据源或myview的逻辑,和SSIS无关。如果返回正常行数,再继续排查SSIS环节。
2. 检查SSIS第一步的执行细节
- 查看SSIS作业的执行日志,找到第一步SQL任务的执行记录,重点看:
- 实际执行的SQL语句是否和预期一致(避免连接串错误连到其他库)
- 语句影响的行数(如果是0,说明SSIS里的insert未生效)
- 检查SQL任务的配置:
- 确认
FailTaskIfReturnCodeIsNotSuccessValue已勾选,避免SQL执行出错但任务仍标记为成功 - 查看任务的
ResultSet和Output设置,是否有隐性错误被忽略(比如字段不匹配导致插入失败但未抛出异常)
- 确认
3. 验证第二步的数据源视图
- 在数据库直接查询第二步读取的关联视图:
如果返回0,说明视图的关联逻辑有问题(比如关联的其他表数据被清理、关联条件失效),需要检查视图的join语句和关联表的数据状态。select count(*) from [关联视图名];
4. 排查SSIS事务与隔离级别
- 检查包级和任务级的
TransactionOption设置:- 如果包的事务级别设为
Required,且第一步任务也启用了事务,可能导致第二步读取时,第一步的插入事务未提交,从而读不到数据。尝试将包或第一步的TransactionOption改为Supported或NotSupported
- 如果包的事务级别设为
- 查看隔离级别设置,避免因隔离级别过高(如
Serializable)导致读取不到未提交的数据
5. 检查第二步数据流向的错误处理
- 查看Flat File Destination的错误输出统计:是否有大量行被错误输出丢弃(比如数据类型不匹配、长度截断)
- 检查数据转换组件(如果有)的配置,确认没有过滤掉所有行的逻辑
6. 验证CSV写入配置
- 检查Flat File Destination的属性:确认未勾选
WriteHeaderOnly选项,该选项会仅输出表头而忽略数据行
内容的提问来源于stack exchange,提问作者A DC
相关产品推荐
相关产品推荐

