以下SQL事务的输出是什么?
确定以下代码的输出以下SQL事务的输出是什么?,sql,sql-server,transactions,Sql,Sql Server,Transactions,确定以下代码的输出 PRINT 'Before Transaction' SELECT @@TRANCOUNT BEGIN TRAN T1 PRINT 'After transaction T1 starts' /* Value of @@TranCount is 1 */ SELECT @@TRANCOUNT BEGIN TRAN T2 save TRAN T2 --save tran T2 PRINT 'After transaction T2 starts' /* Value of @@T
PRINT 'Before Transaction'
SELECT @@TRANCOUNT
BEGIN TRAN T1
PRINT 'After transaction T1 starts'
/* Value of @@TranCount is 1 */
SELECT @@TRANCOUNT
BEGIN TRAN T2 save TRAN T2
--save tran T2
PRINT 'After transaction T2 starts'
/* Value of @@TranCount is 2 */
SELECT @@TRANCOUNT
ROLLBACK TRAN T2
PRINT 'After transaction T2 roll backs'
/* Value of @@TranCount is still 2 as the rollback failed due to a error */
SELECT @@TRANCOUNT ---------[IT SHOUD BE 1,BUT WHY RESULT IS COMING AS 2?]
ROLLBACK TRAN T1
PRINT 'After transaction T1 roll backs'
/* Value of @@TranCount is 0 */
SELECT @@TRANCOUNT
输出不正确的原因是什么 来自
回滚事务将@@TRANCOUNT递减为0,除了
回滚事务保存点\ u名称,不影响
@@TRANCOUNT
您有事务T2保存,因此ROLLBACK
对@@tracount
没有影响
如果在事务T1上使用
回滚
,@@tracount
将重置为零答案在于您的代码,因为您使用了保存事务T2,事务T2将被保存,回滚不会影响@@tracount值
尝试在SQL Server中多次运行下面的查询…每次执行此查询时,您都会看到@TRANCOUNT的值增加1
SELECT @@TRANCOUNT
BEGIN TRAN T2 save TRAN T2
PRINT 'After transaction T2 starts'
SELECT @@TRANCOUNT
ROLLBACK TRAN T2
PRINT 'After transaction T2 roll backs'
SELECT @@TRANCOUNT