• SQLServer之创建隐式事务


    隐式事务创建注意事项

    IMPLICIT_TRANSACTIONS为 ON 时,系统处于“隐式”事务模式。 这意味着如果 @@TRANCOUNT = 0,下列任一 Transact-SQL 语句都会开始新事务。 这等同于先执行一个不可见的 BEGIN TRANSACTION

    IMPLICIT_TRANSACTIONS为 OFF 时,上述每个 T-SQL 语句都受一个不可见的 BEGIN TRANSACTION 和一个不可见的 COMMIT TRANSACTION 语句限制。为 OFF 时,事务模式为自动提交。 如果 T-SQL 代码发出了一个可见 BEGIN TRANSACTION,那么事务模式为显式。

    有几点需要说明:

    • 事务模式为隐式时,如果 @@trancount > 0,则不会发出不可见的 BEGIN TRANSACTION。 但是,任何显式 BEGIN TRANSACTION 语句都会递增 @@TRANCOUNT。

    • INSERT 语句和工作单元中的其他任务完成后,须发出 COMMIT TRANSACTION 语句,直到 @@TRANCOUNT 递减为 0。 也可以发出一个 ROLLBACK TRANSACTION。

    • 不会从表中选择的 SELECT 语句不会启动隐式事务。 例如,SELECT GETDATE(); 或 SELECT 1, 'ABC'; 不需要事务。

    • 由于 ANSI 默认值的原因,可能会意外打开隐式事务。 有关详细信息,请参阅 SET ANSI_DEFAULTS (Transact-SQL).

      IMPLICIT_TRANSACTIONS ON 不常用。 大多数情况下,IMPLICIT_TRANSACTIONS 为 ON,是因为选择了 SET ANSI_DEFAULTS ON。

    • 进行连接时, SQL Server Native Client OLE DB Provider for SQL Server 和 SQL Server Native Client ODBC 驱动程序会自动将 IMPLICIT_TRANSACTIONS 设置为 OFF。 对于与 SQLClient 托管提供程序进行连接,及通过 HTTP 端点接收的 SOAP 请求,SET IMPLICIT_TRANSACTIONS 默认为 OFF。

    使用T-SQL脚本创建隐式事务

    语法:

    --声明数据库引用

    use 数据库名称;

    go

    --设置隐式事务开关

    set implicit_transactions { on | off };

    --事务业务逻辑

    事务操作内容;

    --查看是否有事务开启

    select @@trancount;

    --必须提交或者回滚事务

    { commit | rollback } { tran | transaction};

    语法解析:

    --set implicit_transactions { on | off };
    --为 ON 时,系统处于“隐式”事务模式。 这意味着如果 @@TRANCOUNT = 0
    --为 OFF 时,上述每个 T-SQL 语句都受一个不可见的 BEGIN TRANSACTION 和一个不可见的 COMMIT TRANSACTION 语句限制。 为 OFF 时,事务模式为自动提交。

    --用@@TRANCOUNT来测试是否已经打开一个事务.
    ---SELECT @@TRANCOUNT结果是1,意思是当前连接已经打开了一个事务。0的意思是当前没有事务,一个大于1的数的意思是有嵌套事务。
    --@@TRANCOUNT的值是1,这个时候必须提交或者回滚事务,不然等到会话结束,表仍然是锁住,会造成阻塞。

    --{ commit | rollback } { tran | transaction};
    --commit { tran | transaction} 提交事务。
    --rollback { tran | transaction} 回滚事务。

    示例:

    --声明数据库引用
    use testss;
    go

    --查看implicit_transactions状态
    --declare @implicit_transactions varchar(10)='OFF';
    --if((2&@@OPTIONS)=2) set @implicit_transactions='ON';
    --select @implicit_transactions as implicit_transactions;

    --设置隐式事务状态打开
    set implicit_transactions on;
    go

    --开启一个隐式事务
    insert into test1(name,sex,age,height) values('测试隐式事务','女','20','180');

    --判断是否有隐式事务开启,如果有则提交,没有则回滚
    if (select @@TRANCOUNT) is not null and (select @@TRANCOUNT)=1
    commit tran;
    else
    rollback transaction;
    go

    示例结果:依次显示事务执行结果和查询事务执行结果。

  • 相关阅读:
    An internal error occurred during: "Launching MVC on Tomcat 6.x". java.lang.NullPointerException
    bat批处理文件夹内文件名的提取
    人脸识别-常用的人脸数据库
    WPF RichTextBox 做内容展示框 滚动条控制判定是否阅读完成
    WPF+通过配置文件生成菜单(Menu)+源码
    程序员也可以浪漫----倾情奉献一份你值得拥有的浪漫网站源码(情人节快来了~)
    这世界唯一的你:最美程序媛走红网络
    20分钟读懂程序集
    简介4种同步方法的实现
    共享文件夹:The user has not been granted the requested logon type at this computer
  • 原文地址:https://www.cnblogs.com/vuenote/p/9927783.html
Copyright © 2020-2023  润新知