【问题标题】:ssis how to raise an error in a datapackage that has roll backssis 如何在已回滚的数据包中引发错误
【发布时间】:2024-09-17 16:00:01
【问题描述】:

我在一个连接到序列容器的数据包中有一个 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

问题是,当确实发生错误时,执行“回滚传输”并且 sql server 不会引发错误,因此 sql 任务也不会引发错误,并且绿色连接会进行到下一个容器。在 SSIS 数据包中的 sql 任务中执行回滚时,创建失败或阻碍下一步的最佳方法是什么。谢谢。

【问题讨论】:

  • 你总是可以在 catch 块中抛出你自己的错误。
  • 怎么样,你的意思是像 select 1\0 lol

标签: sql sql-server visual-studio ssis bins


【解决方案1】:

你使用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

【讨论】:

  • 这会引发一条消息,但不会引发会导致从一个 ssis 对象到另一个对象失败的错误。