2008-11-28 2 views
0

У меня есть этот бит кода, который я нашел в Интернете в конце каждого из моих хранимых процедур:Таблица ошибок SQL и хранимых процедур

ROLLBACK TRANSACTION 

     PRINT '-----START: ERROR DETAILS-----' 
     PRINT ERROR_NUMBER() 
     PRINT ERROR_SEVERITY() 
     PRINT ERROR_STATE() 
     PRINT ERROR_PROCEDURE() 
     PRINT ERROR_LINE() 
     PRINT ERROR_MESSAGE() 
     PRINT '-----END: ERROR DETAILS-----' 

      DECLARE @prmErrmsg NVARCHAR(4000); 
      DECLARE @prmErrSvr INT; 

      SELECT @prmErrmsg = ERROR_MESSAGE() 
       ,@prmErrSvr = ERROR_SEVERITY(); 

      INSERT INTO dbo.myErrors 
         ([ErrorMessage] 
         ,[ErrorSeverity] 
         ,[DateCreated]) 
       VALUES 
         (@prmErrmsg 
         ,@prmErrSvr 
         ,GetutcDate()) 


      RAISERROR(@prmErrmsg,@prmErrSvr,1) 

Он пишет записи в таблицу myErrors, но не пишет сообщение об ошибке или серьезность ошибки.

Мой первый вопрос: почему?

Я считаю, что это связано с серьезностью ошибки, находящейся в определенном диапазоне.

Как я могу рассказать об этом, чтобы записывать подробные сообщения об ошибках ВСЕГДА, независимо от серьезности?

ответ

2

Согласно MSDN, ERROR_MESSAGE() и т. Д. Устанавливаются только в блоке CATCH инструкции TRY ... CATCH.

Смежные вопросы