Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Przechwytywanie wielu komunikatów o błędach z jednej instrukcji wewnątrz TRY CATCH

W zależności od potrzeb i uprawnień konta, na którym uruchamiasz ten skrypt, możesz użyć DBCC OUTPUTBUFFER(@@spid) .

Wpadłem na ten pomysł, czytając artykuł dotyczący obsługi błędów Erlanda Sommarskoga . Zawiera link do procedury spGET_ErrorMessage .

Niestety to nie do końca działa w moim skrypcie testowym na SQL Server 2008, więc nie jestem pewien, czy format bufora się zmienił, ale może się tam dostać po odrobinie poprawek!

CREATE TABLE #foo
(
c INT DEFAULT(0)
)
ALTER TABLE #foo ALTER COLUMN c VARCHAR(10)

GO
EXEC spGET_LastErrorMessage

Rzeczywisty wynik

Msg 5074, Level 16, State 1, Line 2
The object 'DF__#foo___________c__6DCC4D03' is dependent on column 'c'.

    Msg 4922, Level 16, State 9, Line 2
    ALTER TABLE ALTER COLUMN c failed because one or more objects access this column.

Wyjście zgłoszone

errNumber            errState    errLevel    errMessage                                                                               errInstance                                                                                                                     errProcedure    errLine
-------------------- ----------- ----------- ---------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------- --------------- -----------
5074                 1           16          The object 'DF__#foo___________c__6DCC4D03' is dependent on column 'c'.                  MARTINHP                                                                                                                        NULL            2
4922                 9           16          The object 'DF__#foo___________c__6DCC4D03' is dependent on column 'c'.ALTER TABL        MARTINHP 䄀䰀吀䔀刀 䌀伀䰀唀䴀一 挀 昀愀椀氀攀搀 戀攀挀愀甀猀攀 漀渀攀 漀爀 洀漀爀攀 漀戀樀攀挀琀猀 愀挀挀攀猀猀 琀栀椀         NULL            117


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Proste funkcje SQL Server do rozwiązywania rzeczywistych problemów

  2. Sprawdzenie, czy dana data mieści się w zakresie dat

  3. Warunki wyścigu kolejki procesów SQL Server

  4. Obracanie tabeli wraz z sumą wartości kolumny, gdy typ kolumny to nvarchar

  5. SQL RANK() a ROW_NUMBER()