`

@@TRANCOUNT

阅读更多
http://blog.163.com/xiao_mege/blog/static/7294275320105105718153/

一、

对 COMMIT TRANSACTION 或 COMMIT WORK 的每个调用都应用于最后执行的 BEGIN TRANSACTION。如果嵌套 BEGIN TRANSACTION 语句,那么 COMMIT 语句只应用于最后一个嵌套的事务,也就是在最内层的事务。即使嵌套事务内部的 COMMIT TRANSACTION transaction_name 语句引用外部事务的事务名,该提交也只应用于最内层的事务。

ROLLBACK TRANSACTION 语句的 transaction_name 参数引用一组命名的嵌套事务的内层事务是非法的,transaction_name 只能引用最外部事务的事务名。如果在一组嵌套事务的任意级别执行使用外部事务名称的 ROLLBACK TRANSACTION transaction_name 语句,那么所有的嵌套事务都将回滚。如果在一组嵌套事务的任意级别执行没有 transaction_name 参数的 ROLLBACK WORK 或 ROLLBACK TRANSACTION 语句,那么它将回滚所有嵌套事务,包括最外部事务。

@@TRANCOUNT 函数记录当前事务的嵌套级。

每个 BEGIN TRANSACTION 语句使 @@TRANCOUNT 加 1。

每个 COMMIT TRANSACTION 或 COMMIT WORK 语句使 @@TRANCOUNT 减 1。

没有事务名的 ROLLBACK WORK 或 ROLLBACK TRANSACTION 语句将回滚所有嵌套事务,并使 @@TRANCOUNT 减小到 0。

使用一组嵌套事务中最外部事务的事务名称的 ROLLBACK TRANSACTION 将回滚所有嵌套事务,并使 @@TRANCOUNT 减到 0。

在无法确定是否已经在事务中时,可以用 SELECT @@TRANCOUNT 语句确定 @@TRANCOUNT 是 1 还是更大。如果 @@TRANCOUNT 是 0,则表明不在事务中。

二、

返回在当前连接上已发生的 BEGIN TRANSACTION 语句的数目。

语法:

@@TRANCOUNT


@@TRANCOUNT - xiao_mege - xiao_mege的博客  返回类型

integer


@@TRANCOUNT - xiao_mege - xiao_mege的博客  注释

BEGIN TRANSACTION 语句将 @@TRANCOUNT 增加 1。ROLLBACK TRANSACTION 将 @@TRANCOUNT 递减到 0,但 ROLLBACK TRANSACTION savepoint_name 除外,它不影响 @@TRANCOUNT。COMMIT TRANSACTION 或 COMMIT WORK 将 @@TRANCOUNT 递减 1。


@@TRANCOUNT - xiao_mege - xiao_mege的博客  示例

A. 演示 BEGIN 和 COMMIT 语句的效果

下面的示例演示嵌套的
BEGIN

COMMIT
语句对
@@TRANCOUNT
变量产生的效果。

PRINT @@TRANCOUNT  --  The BEGIN TRAN statement will increment the  --  transaction count by 1.  BEGIN TRAN      PRINT @@TRANCOUNT      BEGIN TRAN          PRINT @@TRANCOUNT  --  The COMMIT statement will decrement the transaction count by 1.      COMMIT      PRINT @@TRANCOUNT  COMMIT  PRINT @@TRANCOUNT  --Results  --0  --1  --2  --1  --0


B. 演示 BEGIN 和 ROLLBACK 语句的效果

下面的示例演示嵌套的
BEGIN TRAN

ROLLBACK
语句对
@@TRANCOUNT
变量产生的效果。

PRINT @@TRANCOUNT
--  The BEGIN TRAN statement will increment the
--  transaction count by 1.
BEGIN TRAN
    PRINT @@TRANCOUNT
    BEGIN TRAN
        PRINT @@TRANCOUNT
--  The ROLLBACK statement will clear the @@TRANCOUNT variable
--  to 0 because all active transactions will be rolled back.
ROLLBACK
PRINT @@TRANCOUNT
--Results
--0
--1
--2


分享到:
评论

相关推荐

    嵌套事务的回滚与提交.pdf

    每当开始一个事务,`@@TRANCOUNT`增加1,每当我们提交或回滚一个事务,`@@TRANCOUNT`减少1。当`@@TRANCOUNT`降回0时,表示没有活动的事务。嵌套事务的提交依赖于最外层的事务,只有最外层事务提交,内部事务才会被...

    微软内部资料-SQL性能优化3

    Contents Overview 1 Lesson 1: Concepts – Locks and Lock Manager 3 Lesson 2: Concepts – Batch and Transaction 31 Lesson 3: Concepts – Locks and Applications 51 Lesson 4: Information Collection and ...

    SQL Server存储过程模板

    - **@@trancount**: 当前活动事务的数量。 ##### 5. 主逻辑 ```sql -- Example1: 错误处理 select @Error = @@error, @RowCount = @@rowcount if (@Error <> 0) goto error -- Example2: 条件判断 if (@RowCount =...

    数据库原理与应用实验15_整理.pdf

    如果在嵌套事务中,`COMMIT`会使`@@TRANCOUNT`递减1,但不会完全还原到0,直到最外层的事务被提交或回滚。 4. **事务回滚**: `ROLLBACK TRANSACTION`用于撤销事务中的所有更改,将数据库状态回滚到事务开始时的...

    实验17事务与并发控制.pdf

    这会增加`@@TRANCOUNT`计数器的值,表示当前事务的层级。 - **事务名称**:可选地,可以为事务指定一个名称,便于管理和跟踪。名称限制为32个字符以内,且在嵌套事务中,最外层事务的名称是必需的。 - **事务标记*...

    在存储过程中编写正确的事务处理代码(SQL_Server_2000_.doc

    IF @@TRANCOUNT > 0 ROLLBACK TRAN END CATCH IF @@TRANCOUNT > 0 COMMIT TRAN ``` 此外,存储过程`dbo.pr_tran_inproc`展示了如何在存储过程中使用事务处理。它首先关闭返回行计数(`SET NOCOUNT ON`),然后...

    SQL Server 系统存储过程全局变量

    `@@TRANCOUNT`返回当前会话中打开的事务数量。这对于确保正确的事务处理和数据一致性至关重要。 #### 15. `@@VERSION` `@@VERSION`返回SQL Server的版本信息。这对于环境配置检查或解决兼容性问题非常有用。 ####...

    实验15事务与并发控制.pdf

    - **开始事务**:使用`BEGIN TRANSACTION`语句开始一个新的事务,这会增加`@@TRANCOUNT`计数器。 - **事务命名**:可以为事务指定一个名称,方便在多个嵌套事务中跟踪和管理。 - **事务提交**:`COMMIT ...

    SQL Server实用脚本

    IF @@TRANCOUNT > 0 ROLLBACK TRAN END CATCH IF @@TRANCOUNT > 0 COMMIT TRAN ``` **知识点说明**: - `BEGIN TRAN` 开始一个新的事务。 - `BEGIN TRY...BEGIN CATCH` 结构用于事务内的错误处理。 - `ROLLBACK ...

    Transactions and Concurrency.pptx

    @@TRANCOUNT 是一个SQL Server中的系统变量,用于跟踪当前会话中的事务数量。在事务开始时,该值会增加1;当事务结束(提交或回滚)时,该值会减少1。 3. **事务边界** 事务可以显式定义(例如,使用BEGIN ...

    解决SQL2000数据库连接失败,登陆不正确操作方法.pdf

    IF (@@TRANCOUNT > 0) BEGIN RAISERROR (15002, -1, -1, 'sp_password'); RETURN (1); END; -- RESOLVE LOGIN NAME (disallows NT names) IF NOT EXISTS (SELECT * FROM WHERE loginname = @loginame AND ...

    SQLserver全局变量

    26. `@@TRANCOUNT`:返回当前会话中活跃的事务数,对事务管理至关重要。 通过查询这些全局变量,SQL Server管理员可以有效地监控系统状态、诊断问题和优化性能。例如,检查`@@CPU_BUSY`和`@@IDLE`可以帮助识别CPU...

    sql2000数据库修改sa密码

    IF (@@trancount > 0) begin raiserror(15002,-1,-1,'sp_password') return (1) end -- RESOLVE LOGIN NAME (disallows nt names) if not exists (select * from master.dbo.syslogins where loginname = @...

    sql全局变量说明_sql_server

    27. **@@TRANCOUNT**:返回当前会话中活动事务的数量,对管理和控制事务流很有帮助。 这些全局变量是SQL Server管理员和开发人员的重要工具,它们提供了丰富的系统状态信息,有助于诊断问题、优化性能和编写更智能...

    SQl Server 中的循环 跨数据库导数据为例

    IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; -- 处理错误信息 END CATCH ``` 在这个例子中,我们使用了BULK INSERT导入CSV文件,并通过指定批处理大小来控制每次导入的数据量。注意,你需要替换'`SourceFilePath....

    sqlserver嵌套事务总结

    该文档从sqlserver事务讲起,详述ACID,@@trancount,在嵌套事务中使用保存点,命名事务等

    数据库迁移检查清单

    * 验证和确认@@transtate/@@trancount/@@isolation * 验证和确认锁定模式share/exclusive * 验证和确认服务器/所有者命名约定 * 验证和确认重新编译选项 * 验证和确认业务逻辑 * 验证和确认对象依赖关系 * 验证和...

    MS-SQL Server杂志-事务全攻略

    嵌套事务会增加 `@@TRANCOUNT` 的值,而 COMMIT 或 ROLLBACK 命令则会减少该值。 ##### 事务调试语句 - **SET IMPLICIT_TRANSACTIONS ON/OFF**:控制隐式事务的行为。 - **SET XACT_ABORT ON/OFF**:确定是否在发生...

    MSSQL存储过程基础

    9. **事务处理**:`BEGIN distributed transaction`开始一个事务,`COMMIT TRANSACTION`提交事务,`@@TRANCOUNT`检查当前的事务计数。 10. **字符串连接**:可以使用加号(+)来连接字符串,如`SET @m_sql = @m_sql +...

Global site tag (gtag.js) - Google Analytics