所谓嵌套就是说insert调用了update,update又调用了insert,你写了两个存储过程后调用exec来执行等于是顺序执行了两个存储过程,与嵌套没有任何关系,这是概念上的区别,你可以看看程序设计中关于嵌套的定义

解决方案 »

  1.   

    这个是事务嵌套事务处理嵌套的语法和对@@TRANCOUNT的影响BEGIN TRAN  @@TRANCOUNT+1
    COMMIT TRAN @@TRANCOUNT-1
    ROLLBACK TRAN 使@@TRANCOUNT回归0
    SAVE TRAN 不影响@@TRANCOUNT举例
    SELECT '事务处理前', @@TRANCOUNT      --值为 0
    BEGIN TRAN
      SELECT '第一个事务', @@TRANCOUNT    --值为 1
        SELECT * FROM table1
        BEGIN TRAN 
           SELECT '第二个事务', @@TRANCOUNT  --值为 2
             DELETE table1
        COMMIT TRAN
        SELECT '递交第二个事务', @@TRANCOUNT --值为 1
    ROLLBACK TRAN
    SELECT '回滚第一个事务', @@TRANCOUNT --值为 0
    你的例子改为这样的话
    create procedure sp_1
    as
    begin transaction
    SELECT '第一个过程', @@TRANCOUNT
    select * from table
    commit transaction
    SELECT '递交第一个过程', @@TRANCOUNT --值为 0create procedure sp_2
    as
    begin transaction
    SELECT '第二个过程', @@TRANCOUNT
    select * from talbe
    commit transaction
    SELECT '递交第二个过程', @@TRANCOUNT --值为 0运行begin tran t1
    SELECT '测试嵌套开始', @@TRANCOUNT
    exec sp_1
    exec  sp_2
    commit tran t1
    SELECT '测试嵌套结束', @@TRANCOUNT--结果
    测试嵌套开始      1
    第一个过程 2
    递交第一个过程    1 
    第二个过程 2
    递交第二个过程    1
    测试嵌套结束      0
    --sp1 与sp2 间没有事务嵌套,嵌套发生在t1与sp_1,t1与sp_2之间
      

  2.   

    SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚
    过程离使用链接服务器要加上set xact_abort onSET ANSI_NULL_DFLT_ON on SET ANSI_WARNINGS on  BTW :后来我想呀想,想呀想。。看着我深爱的女孩的照片,想呀想
    哈哈,你狂有精神动力么,
    because 偶没有女孩,所以就只能想到这里了,嘻嘻嘻
      

  3.   

    有连接服务器看来只能这样了,加set xact_abort on 吧