0

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

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

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

这是存储过程代码的概要:

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
4

0 回答 0