事务等待提交,否则会阻塞资源



我想在事务块中放入一些语句,以便在出现任何错误时脚本回滚。我将事务与这样的TRY块组合在一起(并注意INSERT语句应该通过语法错误(:

begin try
begin tran
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE TABLE [MY_DATABASE].[dbo].[MY_TABLE](
[Id] [nchar](10) NULL,
[Name] [nchar](10) NULL
) ON [PRIMARY]
insert into [MY_DATABASE].[dbo].[MY_TABLE] (Id,Name) values ('1','Vampire'),  ('2')
commit tran
end try
begin catch
rollback tran
end catch

运行此语句后,我注意到我无法在管理工作室中获取其他表,并且该操作正在等待我提交。

如何更改我的事务尝试块,以便在出现任何错误时回滚到begin try语句之前的位置?

脚本过早停止,而不是执行catch块。 令人不满意的答案是,这是TRY/CATCH无法处理的事情之一。

SQL Server 启动事务,创建表,然后崩溃

Msg 10709,级别 16,状态 1,第 117 行 表值构造函数中每行的列数必须相同。

离开打开的事务(这就是您无法在管理工作室中获取其他表的原因(。

begin try
begin tran
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE TABLE [dbo].[MY_TABLE](
[Id] [nchar](10) NULL,
[Name] [nchar](10) NULL
) ON [PRIMARY]
insert into [dbo].[MY_TABLE] (Id,Name) values ('1','Vampire'),  ('2')
commit tran
end try
begin catch
print 'Now inside the "catch" block.  You will not see this message.';
rollback tran
end catch
go
select * from MY_TABLE;
select @@trancount as TranCount;
rollback tran;

输出如下。 请注意表和打开事务的存在:

Msg 10709, Level 16, State 1, Line 117
The number of columns for each row in a table value constructor must be the same.
Id         Name
---------- ----------
(0 rows affected)
TranCount
-----------
1
(1 row affected)

脚本尚未执行。它只是一个语法错误,导致脚本在执行之前引发错误。什么都没有开始执行。

最新更新