【问题标题】:Does SQL Server support nested transactions?SQL Server 是否支持嵌套事务?
【发布时间】:2019-06-04 02:38:16
【问题描述】:

我想知道 SQL Server 是否支持嵌套事务?

我可以看到其他类似的问题。

另外 - 我如何知道我是否处于嵌套事务中?

这似乎是一个奇怪的问题.. 但是.. 在 SSMS 中,我可能意外地多次运行命令 BEGIN TRANSACTION .. 例如 .. 这是否意味着我需要多次运行 COMMIT TRANSACTION 才能完成交易?

我认为通常应该避免嵌套事务。

SELECT
    [Initial Assess -  Sweating], 
    COUNT(*) 
FROM
    Clinical.SAASCaseCards 
GROUP BY
    [Initial Assess -  Sweating]

BEGIN TRANSACTION;

UPDATE Clinical.SAASCaseCards 
SET [Initial Assess -  Sweating] = '1' 
WHERE [Initial Assess -  Sweating]= '01'

COMMIT TRANSACTION ;

【问题讨论】:

    标签: sql-server transactions nested


    【解决方案1】:

    您可以使用全局变量@@TRANCOUNT 来查看它是如何工作的。

    如果您运行select @@TRANCOUNT 并且您周围没有交易,您将获得 0。

    begin transaction 每运行一次,@@TRANCOUNT 就会增加 1。 每次运行 commit (transaction) 时,@@TRANCOUNT 减 1。如果这使 @@TRANCOUNT 设置为 0,则事务确实已提交。

    另一方面,rollback (transaction) 会将 @@TRANCOUNT 设置为 0 并回滚所有更改,而不管当时 @@TRANCOUNT 的值如何。

    因此,没有功能嵌套。只有这个计数器是为了让不同的模块进行自己的事务处理。

    我推荐Erland Sommerskog's article 进一步阅读。

    【讨论】:

    • 这是另一篇关于嵌套事务神话的优秀文章。 sqlskills.com/blogs/paul/…
    • 不错的@Sean,实际上 your 链接是我试图找到的链接,但不在我的收藏列表中!
    【解决方案2】:

    是的,事务可以嵌套。但是一旦你的外部事务失败,你的内部事务也会回滚。

    Nested transactions in Sql Server

    【讨论】:

    【解决方案3】:

    据我所知,事务不能嵌套。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多