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