如何在表-SQL Server上设置自动提交

时间:2015-03-05 09:33:22

标签: sql sql-server tsql

我有一个存储过程,我需要只提交ERROR_LOG表,如果有任何错误或者我们在任何进程之间终止该过程。在这种情况下,除了ERROR_LOG表插入之外,所有其他更改都必须回滚。

如何实施?

1 个答案:

答案 0 :(得分:1)

由于表格变量不参与交易,您可以使用此事实来实现目标:

DECLARE @ErrorLog TABLE ( ID INT )

BEGIN TRANSACTION

INSERT  INTO @ErrorLog
        ( ID )
VALUES  ( 1 ),
        ( 2 )

ROLLBACK TRANSACTION

SELECT  *
FROM    @ErrorLog

输出:

ID
1
2

因此,在您的存储过程中,而不是插入实际表插入到表变量中,并在错误时插入到实际表中:

CREATE PROCEDURE spTest
AS

BEGIN TRY
   DECLARE @ErrorLog TABLE(...)

   BEGIN TRANSACTION

   INSERT INTO @ErrorLog VALUES(...)

   COMMIT TRANSACTION      
END TRY
BEGIN CATCH

   ROLLBACK TRANSACTION

   INSERT INTO ErrorLog SELECT * FROM @ErrorLog

END CATCH