sql >> Base de Datos >  >> RDS >> Sqlserver

Captura de múltiples mensajes de error de una sola declaración dentro de TRY CATCH

Según sus necesidades y los permisos de la cuenta con la que ejecuta este script, es posible que pueda usar DBCC OUTPUTBUFFER(@@spid) .

Encontré esta idea al leer el artículo de manejo de errores de Erland Sommarskog. . Se vincula a un procedimiento spGET_ErrorMessage .

Desafortunadamente esto no bastante Sin embargo, funciona en mi script de prueba en SQL Server 2008, así que no estoy seguro de si el formato del búfer ha cambiado, ¡pero podría llegar allí con un poco de ajuste!

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

GO
EXEC spGET_LastErrorMessage

Salida real

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.

Resultado reclamado

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