ssis, как вызвать ошибку в пакете данных, который имеет откат

У меня есть задача 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

Проблема в том, что когда возникает ошибка, выполняется "Откат Tran", и сервер SQL не вызывает ошибку, поэтому задача SQL не выполняется, и зеленое соединение переходит к следующему контейнеру. Каков наилучший способ создать сбой или помешать следующему шагу при выполнении отката в рамках задачи sql в пакете данных служб SSIS. Благодарю.

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

Другие вопросы по тегам