Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server:Повторно изключване с оригиналния номер на изключение

Може да успеете да го хвърлите отново по този начин:

..
END TRY
BEGIN CATCH
    DECLARE @errnum int;
    SELECT @errnum = ERROR_NUMBER();
    RAISERROR (@errnum, 16, 1);
END CATCH

Най-вероятно обаче губите смисъл поради %s и т.н. контейнери в редовете sys.messages за ERROR_NUMBER()

Можете да направите нещо подобно, за да включите номера и да хвърлите отново оригиналното съобщение

..
END TRY
BEGIN CATCH
    DECLARE @errnum nchar(5), @errmsg nvarchar(2048);
    SELECT
        @errnum = RIGHT('00000' + ERROR_NUMBER(), 5),
        @errmsg = @errnum + ' ' + ERROR_MESSAGE();
    RAISERROR (@errmsg, 16, 1);
END CATCH

Първите 5 знака са оригиналното число.

Но ако имате вложен код, тогава ще получите „00123 00456 Текст на грешка“.

Лично аз работя само с номера на SQL изключения, за да отделя моите грешки (50 000) от грешките на двигателя (напр. липсващи параметри), когато кодът ми не се изпълнява.

И накрая, можете да му предадете върнатата стойност.

Зададох въпрос относно това:Обработка на грешки в SQL Server:изключения и договорът база данни-клиент



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да напиша foreach в SQL Server?

  2. Как можем да проверим дали таблицата има индекс или не?

  3. Сравнение на типовете данни за дата и час в SQL Server

  4. Проверка на нарушението на правилото за референтна цялост преди изтриване

  5. Премахване на първичен ключ (клъстериран индекс) за увеличаване на производителността на вмъкване