原文:
SQL Server 事務(wù)嵌套
示例代碼:
DECLARE
@TranCounter
INT
;
SET
@TranCounter
=
@@TRANCOUNT
;
IF
@TranCounter
>
0
--
Procedure called when there is
--
an active transaction.
--
Create a savepoint to be able
--
to roll back only the work done
--
in the procedure if there is an
--
error.
SAVE
TRANSACTION
ProcedureSave;
ELSE
--
Procedure must start its own
--
transaction.
BEGIN
TRANSACTION
;
--
Modify database.
BEGIN
TRY
/*
*
Write your T-SQL here...
*
*/
--
Get here if no errors; must commit
--
any transaction started in the
--
procedure, but not commit a transaction
--
started before the transaction was called.
IF
@TranCounter
=
0
--
@TranCounter = 0 means no transaction was
--
started before the procedure was called.
--
The procedure must commit the transaction
--
it started.
COMMIT
TRANSACTION
;
END
TRY
BEGIN
CATCH
--
An error occurred; must determine
--
which type of rollback will roll
--
back only the work done in the
--
procedure.
IF
@TranCounter
=
0
--
Transaction started in procedure.
--
Roll back complete transaction.
ROLLBACK
TRANSACTION
;
ELSE
--
Transaction started before procedure
--
called, do not roll back modifications
--
made before the procedure was called.
IF
XACT_STATE()
<>
-
1
--
If the transaction is still valid, just
--
roll back to the savepoint set at the
--
start of the stored procedure.
ROLLBACK
TRANSACTION
ProcedureSave;
--
If the transaction is uncommitable, a
--
rollback to the savepoint is not allowed
--
because the savepoint rollback writes to
--
the log. Just return to the caller, which
--
should roll back the outer transaction.
--
After the appropriate rollback, echo error
--
information to the caller.
DECLARE
@ErrorMessage
NVARCHAR
(
4000
);
DECLARE
@ErrorSeverity
INT
;
DECLARE
@ErrorState
INT
;
SELECT
@ErrorMessage
=
ERROR_MESSAGE();
SELECT
@ErrorSeverity
=
ERROR_SEVERITY();
SELECT
@ErrorState
=
ERROR_STATE();
RAISERROR
(
@ErrorMessage
,
@ErrorSeverity
,
@ErrorState
);
END
CATCH
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

