我将向 3 个表中插入数据。(根据我的过程。)。但是必须将数据输入到三个表中。否则我想回滚事务。例如:- 如果数据插入到 2 个表中并且没有插入表 3,我想从 2 个表中删除输入的值。
这样做的最佳方法是什么。我可以使用触发器来做到这一点吗?请帮我解决这个问题。
我将向 3 个表中插入数据。(根据我的过程。)。但是必须将数据输入到三个表中。否则我想回滚事务。例如:- 如果数据插入到 2 个表中并且没有插入表 3,我想从 2 个表中删除输入的值。
这样做的最佳方法是什么。我可以使用触发器来做到这一点吗?请帮我解决这个问题。
你可以试试这个:
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
采用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
更多信息请点击此处。