A basic template for creating transactions in SQL Server.
--
-- Example 1
-- ----------------------------------------------------------------------------
begin try
begin transaction;
-- ...
-- Code goes here
-- ....
commit transaction;
end try
begin catch
if @@trancount > 0
begin
rollback transaction;
end;
declare @ERROR_SEVERITY int,
@ERROR_STATE int,
@ERROR_NUMBER int,
@ERROR_LINE int,
@ERROR_MESSAGE nvarchar(4000);
select @ERROR_SEVERITY = error_severity(),
@ERROR_STATE = error_state(),
@ERROR_NUMBER = error_number(),
@ERROR_LINE = error_line(),
@ERROR_MESSAGE = error_message();
raiserror('Msg %d, Line %d, :%s', @ERROR_SEVERITY, @ERROR_STATE, @ERROR_NUMBER, @ERROR_LINE, @ERROR_MESSAGE);
end catch;
--
-- Example 2
-- Source: https://github.com/readyroll/sql-server-samples/blob/master/samples/databases/wide-world-importers/readyroll/WideWorldImporters/Programmable%20Objects/Website/Stored%20Procedures/InsertCustomerOrders.sql
-- ----------------------------------------------------------------------------
create procedure Website.InsertCustomerOrders
@OrdersCreatedByPersonID int,
@SalespersonPersonID int
with execute as owner
as
begin
set nocount on;
set xact_abort on;
begin try
begin tran;
-- ...
-- Code goes here
-- ....
commit;
end try
begin catch
if xact_state() <> 0
begin
rollback tran;
end;
print N'Unable to create the customer orders.';
throw;
return -1;
end catch;
return 0;
end;