我正在编写一个存储过程,它将用于每4分钟进行一次同步。它只是一个测试用例,我也需要在其中捕获异常。在这个过程中是否还有其他方法可以使用try和catch块?或者这很好吗?
这是存储过程:
Create procedure inbound_test
@APP1_NO int,
@APP1_NAME nvarchar (20),
@APP1_CREATED date,
@APP1_NO_PK nvarchar(20)
as
if exists (select App1_no from test_in1 where App1_no = @APP1_NO)
Begin try
Begin transaction
Update test_in1
set APP1_NO = @APP1_NO,
APP1_NAME = @APP1_NAME,
APP1_CREATED = @APP1_CREATED,
APP1_NO_PK = @APP1_NO_PK
where App1_no = @APP1_NO
Commit transaction
End try
Begin Catch
If @@Trancount > 0
Throw;
End Catch
else
If @@ROWCOUNT=0
Begin try
Begin Transaction
insert into test_in1(
APP1_NO ,
APP1_NAME ,
APP1_CREATED,
APP1_NO_PK
)
values ( @APP1_NO ,@APP1_NAME , @APP1_CREATED,@APP1_NO_PK)
Commit transaction
End try
Begin Catch
If @@Trancount >0
Throw;
End Catch
GO
答案 0 :(得分:0)
单个更新或Insert语句将自动处于原子事务中。您不需要显式事务来启动和提交。如果该语句成功,那么它将被提交,否则它已经被回滚。此外,您没有在catch中显式回滚,这是不必要的。
另外,block不需要另一个条件'IF @@ Rowcount> 0'原因是如果它在else块下面,则意味着你有该值的记录。