【发布时间】:2014-07-16 19:44:36
【问题描述】:
我正在使用 TRY CATCH 块来捕获错误并进行回滚
ALTER PROCEDURE sp_first
/*
parameters
*/
BEGIN TRY
BEGIN TRANSACTION
/*
statements
*/
COMMIT
END TRY
BEGIN CATCH
IF(@@TRANCOUNT>0)
ROLLBACK
END CATCH
如果在 sp_first 内部调用另一个存储过程 sp_inner,它也执行 DML 语句 INSERT、DELETE、UPDATE 等,上述方法是否有效?
ALTER PROCEDURE sp_first
/*
parameters
*/
BEGIN TRY
BEGIN TRANSACTION
/*
statements of sp_first
*/
-- stored procedure sp_inner also requires rollback if error occurs.
EXEC sp_inner @paramaterList
COMMIT
END TRY
BEGIN CATCH
IF(@@TRANCOUNT>0)
ROLLBACK
END CATCH
如果使用嵌套存储过程,如何实现回滚?
【问题讨论】:
-
参见A SQL Server DBA myth a day: (26/30) nested transactions are real - 嵌套事务是 SQL Server 中的一个神话 - 它们并不真正受支持。
标签: sql sql-server sql-server-2008 tsql