我要将数据插入到3个表中。(根据我的过程。)。但是数据必须输入到三个表中。另外我想要回滚事务。 例如: - 如果数据插入2个表但没有插入表3,我想从2个表中删除输入的值。
最好的方法是什么。我可以使用触发器来做到这一点吗?请帮我解决这个问题。
答案 0 :(得分: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
答案 1 :(得分: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
了解更多Go here。