SQL Server是否支持嵌套事务?

时间:2019-06-04 02:38:16

标签: sql-server transactions nested

我想知道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 ;

3 个答案:

答案 0 :(得分:1)

您可以使用全局变量@@ TRANCOUNT来查看其工作原理。

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

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

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

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

我建议Erland Sommerskog's article供进一步阅读。

答案 1 :(得分:0)

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

Nested transactions in Sql Server

答案 2 :(得分:-2)

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