在我的SSIS包中间,我有一个执行SQL任务,它调用SQL服务器上的存储过程。该存储过程包含一个事务并更新某些记录,没有存储过程的输出。如果在此存储过程中遇到错误,则事务将回滚。
如果存储过程中的事务遇到问题并被回滚,我无法弄清楚如何处理我的SSIS包。
最好的方法是什么?我可以在存储过程中添加一些逻辑来输出成功或失败,但我没看到的是如何在SSIS中使用它来停止处理。
答案 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)
以下步骤可能会对您有所帮助。
output parameter
Script task
拖到控制流ReadOnlyVariables
Edit Script
将以下代码粘贴到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;
希望它有所帮助!