2013-08-29 86 views
1

请有人帮忙。存储过程中的交易

我在作业中有几个存储过程,并在其中一个我开始一个事务删除一些行,如果行大于10,然后我回滚。然而,如果没有我不想立即犯下,因为2个存储过程后来我做了类似的事情。然而,如果在这种情况下,如果计数大于10,我希望它在我盯着交易(前两个存储过程)时一直回滚到

是否可以在存储过程中启动事务并具有多个回滚并在某处结束提交权限,还是必须将所有代码放入一个存储过程才能执行此操作?

+0

MySQL或SQL-Server? – RandomSeed

+0

在我看来,最好避免在存储过程中完全提交和回滚。 –

回答

2

您可以使用@@ TRANCOUNT来确定您是否有未完成的未提交事务,然后使用它来规定存储过程的逻辑。

CREATE PROCEDURE Proc1 
AS 
BEGIN 
    BEGIN TRANSACTION 
    // DO STUFF 
    IF (@@ROWCOUNT > 10) 
     ROLLBACK TRANSACTION 
END 

CREATE PROCEDURE Proc2 
AS 
BEGIN 
    IF (@@TRANCOUNT > 0) 
    BEGIN 
     // DO STUFF 
     IF (@@ROWCOUNT > 10) 
      ROLLBACK TRANSACTION 
    END 
END 

CREATE PROCEDURE Proc3 
AS 
BEGIN 
    IF (@@TRANCOUNT > 0) 
    BEGIN 
     // DO STUFF 
     IF (@@ROWCOUNT > 10) 
      ROLLBACK TRANSACTION 
     ELSE 
      COMMIT TRANSACTION 
    END 
END 
+0

谢谢,那正是我想要的。 :) – Abbaskhan