我想在事务块中放入一些语句,以便在出现任何错误时脚本回滚。我将事务与 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
运行此语句后,我注意到我无法在managementstudio中获取其他表,并且操作正在等待我提交。
如何更改事务try块,以便在出现任何错误时回滚到 begin try
声明?
2条答案
按热度按时间qij5mzcb1#
脚本尚未执行。只是语法错误导致脚本在执行前抛出错误。什么也没有开始执行。
soat7uwm2#
您的脚本过早停止,而不是执行
catch
阻止。令人不满意的答案是,这是TRY/CATCH
无法处理。sql server启动事务,创建表,然后崩溃
msg 10709,level 16,state 1,line 117表值构造函数中每行的列数必须相同。
离开打开的事务(这就是为什么不能在mgmt studio中获取其他表)。
输出如下。请注意表和打开的事务的存在: