希望的情况是这样的
begin tran
for(int i =1;i<N;i++)

    执行存储过程(此存储过程有2个操作,insert,update)

commit tran or roolback tran
循环后,没有错误就一起提交,有就都不提交,
这样写有没有问题?存储过程中的insert和update 是不是不能加事务了??

解决方案 »

  1.   

    如果只是在事物里执行一个存储过程建议直接把事物加到存储过程里面!!
    ALTER PROCEDURE [dbo].存储过程名 
    @Message nvarchar(max) output 
    AS 
    BEGIN BEGIN TRAN 
    BEGIN TRY 
    --这里面写SQL语句 --提交事务 
    COMMIT TRAN 
    SET @Message='交易完成' 
    END TRY 
    BEGIN CATCH 
    --回滚事务 
    ROLLBACK TRAN 
    SET @Message='交易失败' 
    END CATCH 
    END
      

  2.   

    你的事务是加在哪里的?for(int i =1;i <N;i++) 存储过程不支持这么写的 
      

  3.   

    存储过程中的insert和update 是不是不能加事务了??不需要加了
      

  4.   

    这样写有没有问题?存储过程中的insert和update 是不是不能加事务了??
    ==========================
    晕.我没看清楚,我以为你写的就是一个存储过程.写里边写外边都行,如果放到存储过程里边.那就是针对一个过程中的操作进行提交或回滚
    如果是写在外边.就是对你所有的操作提交或回滚(要保证是在同一个事务中)
      

  5.   

    谢谢,
    我是从gridview取N条记录,对这些记录进行操作(放在事务里),每个操作有insert和update,如果有一条记录操作时有问题,已经操作的记录都需要回滚
    知道怎么做了
      

  6.   

    begin tran 
    for(int i =1;i <N;i++) 
    { 
        --执行存储过程(此存储过程有2个操作,insert,update) 
      insert操作
         if @@rowcount=0   --影响的行数
           rollback
        else 
          update操作
           if @@rowcount=0  --影响的行数
          rollback
    } 
    commit
    end tran
      

  7.   

    http://blog.csdn.net/greatverve/archive/2008/11/05/3223906.aspx
      

  8.   

    存储过程中不用加了
    不然存储过程中以commit
    外面rollback也没用了这样写就行