Here is something similar to what I use based on: Error and Transaction Handling in SQL Server Part One (of Three) – Jumpstart Error Handling - Erland Sommarskog
Table and procedure setup:
create table dbo.error_handler_log (
id int identity(1,1) not null primary key
, error_date datetimeoffset(7) not null
, severity tinyint not null
, [state] tinyint not null
, [number] int not null
, line int not null
, [procedure] sysname null
, message nvarchar(2048)
);
go
create procedure [dbo].[error_handler_sp] as
begin
set nocount, xact_abort on;
declare
@error_date datetimeoffset(7) = sysdatetimeoffset()
, @severity tinyint = isnull(error_severity(),16)
, @state tinyint = isnull(error_state(),1)
, @number int = isnull(error_number(),0)
, @line int = isnull(error_line(),0)
, @procedure sysname = error_procedure()
, @message nvarchar(2048) = error_message();
insert into [dbo].[error_handler_log]
([error_date],[procedure],[severity],[state],[number],[line],[message]) values
(@error_date, @procedure, @severity, @state, @number, @line, @message);
--raiserror(@message, @severity, @state); /* don't re-raise error to continue code execution */
end;
go
rextester demo: http://rextester.com/EYLAFM93158
dbfiddle.uk demo
begin try;
select 1/0 as err;
end try
begin catch;
exec dbo.error_handler_sp;
end catch;
begin try;
select 1/0 as err;
end try
begin catch;
exec dbo.error_handler_sp;
end catch;
begin try;
select 1/1 as one;
end try
begin catch;
exec dbo.error_handler_sp;
end catch;
select *
from dbo.error_handler_log;
returns:
+-----+
| one |
+-----+
| 1 |
+-----+
+----+----------------------------+----------+-------+--------+------+-----------+-----------------------------------+
| id | error_date | severity | state | number | line | procedure | message |
+----+----------------------------+----------+-------+--------+------+-----------+-----------------------------------+
| 1 | 10/08/2017 13:26:00 +01:00 | 16 | 1 | 8134 | 2 | null | Divide by zero error encountered. |
| 2 | 10/08/2017 13:26:00 +01:00 | 16 | 1 | 8134 | 8 | null | Divide by zero error encountered. |
+----+----------------------------+----------+-------+--------+------+-----------+-----------------------------------+