Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server是否支持嵌套事务?_Sql Server_Transactions_Nested - Fatal编程技术网

Sql server SQL Server是否支持嵌套事务?

Sql server SQL Server是否支持嵌套事务?,sql-server,transactions,nested,Sql Server,Transactions,Nested,我想知道SQL Server是否支持嵌套事务 我可以看到其他类似的问题 还有-如何知道我是否在嵌套事务中 这似乎是个奇怪的问题。。但是 在SSMS中,我可能意外地多次运行命令begintransaction。。例如这是否意味着我需要多次运行COMMIT事务,以完成事务 我认为嵌套事务通常应该避免 SELECT [Initial Assess - Sweating], COUNT(*) FROM Clinical.SAASCaseCards GROUP BY

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

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

还有-如何知道我是否在嵌套事务中

这似乎是个奇怪的问题。。但是 在SSMS中,我可能意外地多次运行命令
begintransaction
。。例如这是否意味着我需要多次运行
COMMIT事务
,以完成事务

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

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 ;

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

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


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

如果您运行
选择@TRANCOUNT
并且周围没有事务,您将得到0

每次运行
开始事务
,@@TRANCOUNT增加1。
每次运行
提交(事务)
时,@@TRANCOUNT减少1。如果将@TRANCOUNT设置为0,则事务确实已提交

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

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


我建议进一步阅读。

嵌套事务是一个神话。下面是另一篇关于嵌套事务神话的优秀文章。很好的一个@Sean,事实上你的链接是我一直想找到的,但不在我的最爱列表中!