Хранить сообщение об ошибке из кода в отдельной таблице - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть код цикла курсора, где цикл выполняется для одного текстового столбца, который содержит некоторый код «вставить в некоторую таблицу», и для нескольких значений он выдает ошибку из-за некоторой проблемы, связанной с синтаксисом.Я хочу сохранить все сообщения об ошибках в отдельной таблице для их проверки.

    DECLARE @item NVARCHAR(MAX) 
    DECLARE item_cursor CURSOR FAST_FORWARD READ_ONLY 
    FOR SELECT [text] from GDQ_RULE_MSTR_copy 
    OPEN item_cursor


    FETCH NEXT FROM item_cursor INTO @item 
    WHILE @@FETCH_STATUS = 0 
    BEGIN

    EXECUTE sp_executesql @Item
    print @Item
    FETCH NEXT FROM item_cursor INTO @item

    END

    CLOSE item_cursor DEALLOCATE item_cursor

Я хочу сохранить эти сообщения об ошибках в отдельной таблице.

Я пробовал этот запрос ниже:

BEGIN TRY 
DECLARE @item NVARCHAR(MAX) 
DECLARE item_cursor CURSOR FAST_FORWARD READ_ONLY 
FOR SELECT [text] from GDQ_RULE_MSTR_copy 
OPEN item_cursor


FETCH NEXT FROM item_cursor INTO @item 
WHILE @@FETCH_STATUS = 0 
BEGIN

EXECUTE sp_executesql @Item
print @Item
FETCH NEXT FROM item_cursor INTO @item

END

CLOSE item_cursor DEALLOCATE item_cursor

    -- Table does not exist; object name resolution  
    -- error not caught.  

END TRY  
BEGIN CATCH  
    SELECT   
        ERROR_NUMBER() AS ErrorNumber  
       ,ERROR_MESSAGE() AS ErrorMessage;  
END CATCH

Но здесь не очень понятно, на какой линии он застрял и все остальные детали.Не могли бы вы помочь мне с этим

1 Ответ

0 голосов
/ 27 сентября 2019

Ошибка, которую вы получаете, находится в вашем процессе, который выполняется в вашем цикле курсора, может быть попытаться поймать ИСКЛЮЧЕНИЕ В ВАШЕМ ПРОЦЕССЕ и сохранить его в физической таблице, как показано ниже, так что всякий раз, когда вы выполняете код курсора, ваши исключения будут сохраняться втаблицу и позже вы можете отслеживать их.

BEGIN CATCH  

insert into  physical_table(errornumber int,errormessgae varchar(2000),ErrorLine int)
    SELECT   
        ERROR_NUMBER() AS ErrorNumber  
       ,ERROR_MESSAGE() AS ErrorMessage
       ,ERROR_LINE() AS ErrorLine


END CATCH

или Иначе вы также можете создать физическую таблицу в вашем курсоре CATCH BLOCK, как показано ниже, чтобы получить, какой элемент получил исключение:

BEGIN CATCH  

insert into  physical_table(errornumber int,errormessgae varchar(2000),item datatype)
    SELECT   
        ERROR_NUMBER() AS ErrorNumber  
       ,ERROR_MESSAGE() AS ErrorMessage
       ,@Item
END CATCH
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...