使用SQL表管理数据流

时间:2012-07-31 06:02:40

标签: sql sql-server sql-server-2008

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

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

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