日期:2014-05-18  浏览次数:20856 次

SSIS包中控制流 Foreach容器里有个执行SQL任务,出错后怎么跳过继续执行
如题

SSIS包中,控制流部分,有个Foreach循环容器,循环的结果集是SQL语句,然后里面的执行SQL任务,就是执行循环出来的SQL语句
现在如果一条SQL语句出错了,整个循环就终止了,怎么设置,让其跳过这个错误的,继续执行后面查询出来的SQL?


|-----Foreach循环容器--------|-------------------结果集
| |
| 执行SQL任务 |----------------执行SQL
| |
|----------------------------|


结果集查询出来如下格式(只有一列)(设定全局变量Foreach_Name来接收)

update table1 set name='aaa' where ID=1
update table1 set name='bbb where ID=2(比如说这个语句是错误的,bbb后面掉了一个单引号,肯定不能执行)
update table1 set name='bbb' where ID=3
update table1 set name='bbb' where ID=4


将上面得到Foreach_Name做为执行SQL任务的SourceVariable值,然后执行这个语句
现在,如果第二条执行,肯定失败,然后整个循环终止了,第三条和第四条就无法执行了
有什么方法设置下,跳过第二个错误,执行第三条和第四条语句?


------解决方案--------------------
LZ可以试试用多播,得到错误行,和正确的执行。然后错误行进行相应的处理,正确行直接执行后续处理。
------解决方案--------------------
别用foreach,
这样exec(@sql),一个批处理搞定
------解决方案--------------------
用 try .. catch .. 可捕獲異常,然後繼續執行.

不過個人建議, 應該想辦法排除Bug, 為何要出錯.