zoukankan      html  css  js  c++  java
  • 存储过程事物级别

             数据库事务是其他事务模型的基础,当一个事务创建时不同数据库系统都有自己的规则。SQL Server默认在自动提交的模式下工作,每个语句执行完后都会立即提交;与此对照的是Oracle需要你包含一个提交语句。但是当一个语句通过OLE DB执行时,它执行完后一个提交动作会被附加上去。例如:

    DECLARE @TranName VARCHAR(20);

    SELECT @TranName = 'MyTransaction';

     

    BEGIN TRANSACTION @TranName;

    GO

    USE AdventureWorks;

    GO

    DELETE FROM AdventureWorks.HumanResources.JobCandidate

        WHERE JobCandidateID = 13;

    GO

     

    COMMIT TRANSACTION MyTransaction;

    GO

    或者:

    CREATE PROCEDURE Tran1 

    as 

    begin tran 

    set xact_abort on

    Insert Into P_Category(CategoryId,Name)values('1','test1') 

    Insert Into P_Category(CategoryId,Name)values('2','test2') 

    commit tran 

    GO

    set xact_abort on表示遇到错误立即回滚。

    当然你也可以这么写:

    CREATE PROCEDURE tran1

    as

    begin tran

    Insert Into P_Category(CategoryId,Name)values('1','test1') 

    if(@@error<>0)

     rollback tran

    else

     begin

      Insert Into P_Category(CategoryId,Name)values('2','test2')

      if(@@error<>0)

       rollback tran

      else

       commit tran

     end

    GO

    数据库级别事务有它的优势和限制。

    优势:

    l  所有的事务逻辑包含在一个单独的调用中。

    l  拥有运行一个事务的最佳性能。

    l  独立于应用程序。

    限制:

    l  事务上下文仅存在于数据库调用中。

    l  数据库代码与数据库系统有关。

  • 相关阅读:
    [转]tesseract api C++使用例子
    Flyway记录
    线程安全性和共享
    并发初解
    生产环境中遇到过什么问题?或者有没有自己解决什么问题比较自豪的
    Java白皮书关键词理解【随记】
    技术面试记录
    Mac下完全卸载IntelliJIdea
    docker提交镜像后运行新容器mysql无法启动
    IntelliJ IDEA切换SDK解决卡顿的问题
  • 原文地址:https://www.cnblogs.com/lyanet/p/2817052.html
Copyright © 2011-2022 走看看