【发布时间】:2020-06-24 13:41:10
【问题描述】:
我想将一些语句放入事务块中,以便在出现任何错误时脚本回滚。我像这样将事务与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
运行此语句后,我注意到我无法在 Management Studio 中获取其他表,并且该操作正在等待我提交。
如何更改我的事务尝试块,以便在出现任何错误时回滚到begin try 语句之前的位置?
【问题讨论】:
-
TRY...CATCH不会“捕获”语法错误。您需要自己在代码中解决这些问题。 -
@Larnu 你是对的。但你认为它会起作用吗?
-
如果错误是
TRY...CATCH捕获的,那么是的,那么上面应该可以工作。最简单的判断方法是修复语法错误并进行测试。 -
@Larnu 真的。但是我们怎么知道这个不可预测的错误是
TRY可以CATCH吗?如果我们解决了语法错误,是否保证 try 块有效?
标签: sql sql-server database transactions