SQL Server Stored Procedure template.
-- -----------------------------------------------------------------------------
-- Stored Procedure code template
-- https://spaghettidba.com/2011/07/08/my-stored-procedure-code-template/
--
-- Do you use code templates in SSMS? I am sure that at least once you happened
-- to click "New stored procedure" in the object explorer context menu.
--
-- The default template for this action is a bit disappointing and the only
-- valuable line is "SET NOCOUNT ON". The rest of the code has to be heavily
-- rewritten or deleted. Even if you use the handy keyboard shortcut for
-- "Specify values for template parameters" (CTRL+SHIFT+M), you end up entering
-- a lot of useless values. For instance, I find it very annoying having to
-- enter stored procedure parameters definitions separately for name, type and
-- default value.
--
-- Moreover, one of the questions I see asked over and over in the forums at
-- SqlServerCentral is how to handle transactions and errors in a stored
-- procedure, something that the default template does not.
--
-- Long story short, I'm not very happy with the built-in template, so I decided
-- to code my own:
-- -----------------------------------------------------------------------------
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
create procedure <procedurename, sysname, >
as
begin
set nocount on;
set xact_abort,
quoted_identifier,
ansi_nulls,
ansi_padding,
ansi_warnings,
arithabort,
concat_null_yields_null on;
set numeric_roundabort off;
declare @localTran bit;
if @@TRANCOUNT = 0
begin
set @localTran = 1;
begin transaction LocalTran;
end;
begin try
--
-- Insert code here...
--
if @localTran = 1 and XACT_STATE() = 1
begin
commit tran LocalTran
end;
end try
begin catch
declare @ErrorMessage nvarchar(4000);
declare @ErrorSeverity int;
declare @ErrorState int;
select @ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
if @localTran = 1 and XACT_STATE() <> 0
begin
rollback tran
end;
raiserror(@ErrorMessage, @ErrorSeverity, @ErrorState);
end catch;
end;