SQL Server 2008:SP中的错误处理

时间:2014-08-19 17:48:41

标签: sql-server-2008 stored-procedures error-handling rollbacksegments

我有一个存储过程有两个缺陷:

  1. 如果存储过程中存在错误,则会继续执行。我希望一旦发现任何错误,存储过程立即停止。

  2. 此存储过程存在错误日志表,我已自定义错误,如果错误发生,由于存储过程中使用的while循环,它会多次重复相同的错误消息。我希望每次出现只记录一次错误。

  3. 这是存储过程代码的一般概要:

    ALTER PROCEDURE [sp_abc]
    AS 
    BEGIN
        create table #abc1 (id int, name char(20), done bit default 0)
        values (1,'ben'), (2,'charles')
    
        WHILE (SELECT count(*) from #abc1 where done = 0) > 0 
        BEGIN
           BEGIN TRY 
           BEGIN TRANSACTION
               INSERT INTO abc123 (col1, col2)
               VALUES (1,2), (3,4)
        END
        COMMIT TRANSACTION
            END TRY
            BEGIN CATCH
                DECLARE @error_number INT
                ,       @error_message VARCHAR(MAX)
    
                SET @error_number = ERROR_NUMBER()
                SET @error_message = ERROR_MESSAGE() + '  [Trying to insert data into abc123]'
    
                ROLLBACK TRANSACTION
    
                -- Insert error into an error table
                INSERT INTO [dbo].[error_log] ( sp_name,[error_message] )
                SELECT DISTINCT ' sp123 ', @error_message 
            END CATCH
    END
    

0 个答案:

没有答案