1

我在与序列容器连接的数据包中有一个 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 任务中执行回滚时,创建失败或阻碍下一步的最佳方法是什么。谢谢。

4

1 回答 1

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

于 2014-01-22T23:42:09.260 回答