0

假设我有多个 SQL 来更改 SP 中数据库中的数据。我在开始时创建一个事务,然后在最后提交或回滚事务。我所做的是这样的:

declare @HasError bit
BEGIN TRANSACTION
set @HasError = 0;

Insert into Table1....
if(@@ERROR>0)
   set @HasError = 1;

Insert into Table2....
if(@@ERROR>0)
   set @HasError = 1;

Insert into Table3....
if(@@ERROR>0)
   set @HasError = 1;

...

if @HasError = 1
 Rollback;
else
  Commit;

它工作正常。但是需要为每个 U/I/D sql 捕获错误。无论如何我可以知道最后是否只有一段代码有任何错误,例如

if(@@ERROR>0)
   set @HasError = 1;
if @HasError = 1
 Rollback;
else
  Commit;

不需要对每个 U/I/D sql 做这么多的错误检测吗?

4

1 回答 1

1

不确定我是否遵循这个问题,但这样的事情可能对你有用

BEGIN TRAN
   BEGIN TRY
        Insert into Table1....
        Insert into Table2....
        Insert into Table3....
    END TRY
    BEGIN CATCH
        ROLLBACK TRAN
        RETURN
    END CATCH
COMMIT TRAN
于 2013-04-19T15:19:29.137 回答