From b8351a5fc4e2f7433cd3eed4fbedddbbdde8c28f Mon Sep 17 00:00:00 2001 From: Paul Trowbridge Date: Wed, 14 Nov 2018 11:41:59 -0500 Subject: [PATCH] sql server error handling approach idea --- sql_server/error_handling.sql | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 sql_server/error_handling.sql diff --git a/sql_server/error_handling.sql b/sql_server/error_handling.sql new file mode 100644 index 0000000..778cae4 --- /dev/null +++ b/sql_server/error_handling.sql @@ -0,0 +1,33 @@ +CREATE PROC RLARP.TEST AS + +BEGIN + PRINT 'Hi'; --non-erroring statement + create table #temp(x varchar(255)); --create a permanent object to call outside block after error + insert into #temp select 1/0; + insert into #temp select 'hi'; --fill it after error + --select * from #temp; --select it after error + PRINT ERROR_MESSAGE(); --error message is gone + +END; + +begin transaction x +declare @e int; +DECLARE @em varchar(max); +begin try + EXEC RLARP.TEST; +end TRY +begin CATCH + select @e = ERROR_NUMBER(), @em = ERROR_MESSAGE(); + if @e <> 0 + BEGIN + rollback transaction x; + print @em; + END + if @e = 0 + BEGIN + commit transaction x; + print 'ok'; + end +end catch + +SELECT * FROM #temp \ No newline at end of file