sheikh-k
3/22/2017 - 6:45 PM

Transaction Best Practise Basic Structure.sql


CREATE PROCEDURE [dbo].[TransactionBestPractiseStructure]
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @trancount int;
    SET @trancount = @@trancount;
    BEGIN TRY
	   IF @trancount = 0 BEGIN TRANSACTION;
	   ELSE SAVE TRANSACTION usp_test;

	   -- (START) - TRANSACTION RELATED TASK/STUFF SHOULD BE WRITTEN HEREEEEEEEEEEE
	   SELECT * FROM tbl_student
	   -- (END)

	   IF @trancount = 0 COMMIT;
    END TRY


    BEGIN CATCH
	   DECLARE @error int, @message varchar(4000), @xstate int;
	   SELECT @error = ERROR_NUMBER(), @message = ERROR_MESSAGE(), @xstate = XACT_STATE();

	   IF @xstate = -1 ROLLBACK;
	   IF @xstate = 1 AND @trancount = 0 ROLLBACK;
	   IF @xstate = 1 AND @trancount > 0 ROLLBACK TRANSACTION usp_test;
	   RAISERROR ('usp_test error: %d: %s' , 16 , 1 , @error , @message);
    END CATCH;
END