2008-09-18 41 views
4

假设我有如果我打电话从现有的交易这个PROC管理自己的事务在存储特效适当范围的交易

CREATE PROCEDURE theProc 
AS 
BEGIN 

    BEGIN TRANSACTION 

-- do some stuff 

    IF @ThereIsAProblem 
    ROLLBACK TRANSACTION 
    ELSE 
    COMMIT TRANSACTION 
END 

一个存储过程时,PROC可以回滚外部事务。

BEGIN TRANSACTION 
EXEC theProc 
COMMIT TRANSACTION 

如何正确地确定存储过程中的事务范围,以便存储过程不会回滚外部事务?

+0

观看[这个DNR-TV视频](http://www.intellectualhedonism.com/2008/06/01/dnrTV113BrentVanderMeideOnTransactionScopesInNET20Part1.aspx),他们谈论了很多关于事务范围的知识,虽然在代码和SQL中处理它。希望这可以帮助。 – 2008-09-18 23:29:46

回答

2

的语法时,要做到这一点可能是由数据库而异。但是在Transact-SQL中,您所做的是检查@@ TRANCOUNT以查看您是否处于事务中。如果你想创建一个保存点,最后你可以直接通过函数的末尾(相信稍后会发生提交或回滚),否则回滚到你的保存点。

有关更多信息,请参阅微软有关savepoints的文档。

对保存点的支持相当普遍,但我认为发现您目前处于事务中的机制(假设有一个)会有很大的不同。

1

使用@@ TRANCOUNT看到,如果你在一个事务中是已经进入