我在数据包中有一个sql任务,它与序列容器有连接。在sql任务中,我有以下内容:
BEGIN TRY
BEGIN TRAN
TRUNCATE TABLE foo_Copy
INSERT INTO foo_Copy
SELECT * FROM foo
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN
END CATCH
问题是当发生错误时,执行“Rollback Tran”并且sql server不会引发错误,因此sql任务也不会,并且绿色连接将进入下一个容器。创建故障的最佳方法是什么,或者在SSIS数据包中的sql任务中执行回滚时阻碍下一步。感谢。
答案 0 :(得分:0)
您使用RAISERROR,请参阅此链接:sql try catch
BEGIN CATCH
-- Whoops, there was an error
IF @@TRANCOUNT > 0
ROLLBACK
-- Raise an error with the details of the exception
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
SELECT @ErrMsg = ERROR_MESSAGE(),
@ErrSeverity = ERROR_SEVERITY()
RAISERROR(@ErrMsg, @ErrSeverity, 1)
END CATCH
如果您使用的是Sql Server 2012,则可以使用THROW代替RAISERROR:throw error