根据SQL结果停止执行

时间:2014-04-08 22:30:23

标签: sql ssis

在我的SSIS包中间,我有一个执行SQL任务,它调用SQL服务器上的存储过程。该存储过程包含一个事务并更新某些记录,没有存储过程的输出。如果在此存储过程中遇到错误,则事务将回滚。

如果存储过程中的事务遇到问题并被回滚,我无法弄清楚如何处理我的SSIS包。

最好的方法是什么?我可以在存储过程中添加一些逻辑来输出成功或失败,但我没看到的是如何在SSIS中使用它来停止处理。

2 个答案:

答案 0 :(得分:2)

在存储过程中,请确保回滚事务并在发生时引发错误。这样任务就会失败,ssis包将失败并停止执行。

    Begin Try
        Begin Tran deff
            Update [test].[dbo].[User2] 
            Set [Password]='abc'
            Where [User_ID]='abc'
        Commit Tran deff
    End Try

Begin Catch
IF XACT_STATE() <> 0 

  ROLLBACK TRANSACTION
  RAISERROR ('Transaction Rolled Back', 16, 1)

End Catch

答案 1 :(得分:2)

以下步骤可能会对您有所帮助。

  1. 在存储过程中创建输出变量,该变量存储成功/失败消息。
  2. 在SSIS中创建变量以存储“执行SQL任务”的输出
  3. 配置执行SQL任务以存储output parameter
  4. Script task拖到控制流
  5. 将您在步骤2中创建的SSIS变量添加为ReadOnlyVariables
  6. 点击Edit Script
  7. 将以下代码粘贴到Public void Main()方法

        //Change the variable name based on your SSIS package variable
        var sprocMessage = Dts.Variables["SprocOutout"].Value.ToString();
    
        if (sprocMessage=="failure")
        {
            Dts.Events.FireError(0, "SP failed", "SP failed and rolled back", string.Empty,0);
        }
    
        Dts.TaskResult = (int)ScriptResults.Success;
    
  8. 希望它有所帮助!