SSIS包执行成功但跳过DFT,数据未从源表传输至目标表
这种情况确实挺让人头疼的——包整体显示执行成功,但关键的DFT数据流任务没实际跑数据,源明明有数据却没落到目标表。结合你提到的DFT未禁用、连接器用了Logical AND、前置任务成功、前后置事件处理器都触发这些信息,咱们可以从这几个方向逐一排查:
先确认数据源是否真的返回了数据
有时候看起来源表有数据,但DFT里的数据源查询可能加了过滤条件(比如日期范围、状态筛选),刚好这次没有符合条件的数据。SSIS遇到这种情况会直接跳过数据流的实际执行(但Pre/Post Execute事件还是会触发,因为这两个事件是在任务启动/结束时执行,和有没有数据无关)。
建议把DFT数据源里的查询语句单独拿到数据库里执行一遍,看看返回的结果集是不是为空。如果是空的,那就是过滤逻辑的问题,调整条件就能解决。检查DFT的连接管理器是否正确
虽然前置任务能正常获取数据,但DFT的数据源连接管理器可能和前置任务用的不是同一个——比如前置用的是生产库连接,DFT不小心用了测试库连接,导致访问的源其实是空的。
去DFT的数据源属性里确认连接字符串、数据库实例、访问权限,确保它指向的是你预期的源表所在的环境,且当前执行用户有该表的SELECT权限。排查数据流组件的过滤逻辑
看看DFT里有没有条件分流、Lookup这类可能把所有数据过滤掉的组件。比如Lookup组件设置成了“忽略不匹配的行”,而所有源数据在Lookup目标里都找不到匹配项,那所有行都会被丢弃,目标表自然没数据。
可以在数据源之后加一个Row Count组件,执行包后查看计数结果:如果是0,说明数据源没返回数据;如果大于0但目标表没数据,那就是后续组件把数据过滤掉了,顺着数据流逐一检查每个组件的配置就行。查看SSIS详细执行日志
开启包的详细日志记录(勾选OnInformation、OnWarning这类事件),执行后查看日志里关于这个DFT的条目。日志会明确显示“数据流任务已完成,处理了0行”这类信息,能直接帮你定位是数据源没出数据,还是中间组件把数据丢了。
内容的提问来源于stack exchange,提问作者Sirisha Reddy

