0

我将向 3 个表中插入数据。(根据我的过程。)。但是必须将数据输入到三个表中。否则我想回滚事务。例如:- 如果数据插入到 2 个表中并且没有插入表 3,我想从 2 个表中删除输入的值。

这样做的最佳方法是什么。我可以使用触发器来做到这一点吗?请帮我解决这个问题。

4

2 回答 2

3

你可以试试这个:

SET XACT_ABORT ON
 BEGIN TRY
BEGIN TRAN
INSERT INTO Table1 values ()
INSERT INTO Table2 values ()
INSERT INTO Table3 values ()
COMMIT TRAN
END TRY

BEGIN CATCH 
raiserror('Custome Error Message ',16,20)
END CATCH
SET XACT_ABORT OFF

使用 SET XACT_ABORT ON,如果 Transact-SQL 语句引发运行时错误,则整个事务将终止并回滚

在 catch 块中,您可以引发自定义错误或将其记录到表中

 Begin CATCH
 Insert into #LogError values (1,'Error while inserting a duplicate value')
 if @@TRANCOUNT >0
 rollback tran 
 END CATCH
于 2012-07-31T06:15:05.397 回答
1

采用transactions

Commit tran -- if success
Rollback tran -- on error

像这样的东西

Create Proc YourSPName
AS

BEGIN TRAN

INSERT INTO TableOne ( -- Columns)
VALUES  ( -- Values)

IF (@@ERROR <> 0) goto Truncater;

INSERT INTO TableTwo ( -- Columns)
VALUES  ( -- Values)

IF (@@ERROR <> 0) goto Truncater;

INSERT INTO TableThree ( -- Columns)
VALUES  ( -- Values)

IF (@@ERROR <> 0) goto Truncater;


Truncater:
if(@@ERROR<>0)
begin
    rollback tran
    return -1 -- error flag
end
else
    commit tran   

 GO

更多信息请点击此处

于 2012-07-31T06:05:32.967 回答