我以前使用过为我们生成ETL脚本的软件。脚本具有以下结构,但这似乎与我在msdn中看到的内容相反。有人能对下面的结构提供任何想法吗?
SET XACT_ABORT OFF
SET NOCOUNT ON
BEGIN TRY
'DO STUFF'
BEGIN CATCH
SET @return_msg = 'procedure name FAILED'
+ '. Step ' + CONVERT(VARCHAR,ISNULL(@v_step,0))
+ '. Error Num: ' + CONVERT(VARCHAR,ISNULL(ERROR_NUMBER(),0))
+ '. Error Msg: ' + ERROR_MESSAGE()
SELECT @return_msg
END CATCH
IF XACT_STATE() <> 0
BEGIN
ROLLBACK TRANSACTION
END
RETURN 0
END
发布于 2019-05-07 23:00:35
要用xact_state实现有效的尝试捕获,请遵循此msdn链接
SET XACT_ABORT on
SET NOCOUNT ON
BEGIN TRY
'DO STUFF'
End Try
BEGIN CATCH
SET @return_msg = 'procedure name FAILED'
+ '. Step ' + CONVERT(VARCHAR,ISNULL(@v_step,0))
+ '. Error Num: ' + CONVERT(VARCHAR,ISNULL(ERROR_NUMBER(),0))
+ '. Error Msg: ' + ERROR_MESSAGE()
SELECT @return_msg
-- Test XACT_STATE for 0, 1, or -1.
-- If 1, the transaction is committable.
-- If -1, the transaction is uncommittable and should
-- be rolled back.
-- XACT_STATE = 0 means there is no transaction and
-- a commit or rollback operation would generate an error.
-- Test whether the transaction is uncommittable.
IF (XACT_STATE()) = -1
BEGIN
PRINT 'The transaction is in an uncommittable state.' +
' Rolling back transaction.'
ROLLBACK TRANSACTION;
END;
-- Test whether the transaction is active and valid.
IF (XACT_STATE()) = 1
BEGIN
PRINT 'The transaction is committable.' +
' Committing transaction.'
COMMIT TRANSACTION;
END;
END CATCH
RETURN 0
https://dba.stackexchange.com/questions/237608
复制相似问题