В SQL Server хранимые процедуры шаблонный


Что бы вы сделали, чтобы улучшить этот шаблонный пустой хранимой процедуры, учитывая при этом тонкий баланс между длиной, сложности, производительности и ясности?

-- =============================================
-- Author:      The usual suspects
-- Create date: 10/06/2011
-- Description: 
-- 
-- Nice long description about the procedure
--             
-- =============================================
CREATE PROCEDURE 

[dbo].[My_Stored_Proc]
(
-- exampleParam is an example parameter.
@exampleParam INT = 30
)
AS
BEGIN   -- main
SET NOCOUNT ON
BEGIN TRY   
    DECLARE @crlf varchar(2)  
    SET @crlf = CHAR(13) + CHAR(10)

    -- *** DO YOUR STUFF HERE ***

END TRY
BEGIN CATCH
    -- Error handler
    DECLARE @ErrorNumber INT
    DECLARE @ErrorSeverity INT
    DECLARE @ErrorState INT
    DECLARE @ErrorProcedure NVARCHAR(4000)
    DECLARE @ErrorLine INT
    DECLARE @ErrorMessage NVARCHAR(4000)

    DECLARE @ErrorDescription NVARCHAR(4000)

    -- retrieve error info
    SELECT  
        @ErrorNumber = ERROR_NUMBER(),
        @ErrorSeverity = ERROR_SEVERITY(),
        @ErrorState = ERROR_STATE(),
        @ErrorProcedure = ERROR_PROCEDURE(),
        @ErrorLine = ERROR_LINE(),
        @ErrorMessage = ERROR_MESSAGE();

    -- build custom error description
    SELECT @ErrorDescription = @crlf + @crlf + 'Base Error:\t[' + CAST(@ErrorNumber AS VARCHAR) + '] ' +
        @ErrorMessage + @crlf + @crlf +
        'exampleParam:\t' + CAST(@exampleParam AS VARCHAR) + @crlf +
        'Application:\t' + APP_NAME() + @crlf +
        'User:\t' + SYSTEM_USER + @crlf +
        'Database:\t' + DB_NAME() + @crlf +
        'Procedure:\t' + @ErrorProcedure + @crlf +
        'Line:\t' + CAST(@ErrorLine AS VARCHAR) + @crlf +
        'Severity:\t' + CAST(@ErrorSeverity AS VARCHAR) + @crlf +
        'State:\t' + CAST(@ErrorState AS VARCHAR);

    RAISERROR(@ErrorDescription, @ErrorSeverity, 1)
    RETURN @@ERROR
END CATCH
END     -- main

Например, есть хороший способ, чтобы переместить этот обработчик ошибки из хранимой процедуре так что логика может быть общим и не дублируются внутри каждой процедуры? Заметить его можно красиво включить параметры в это сообщение об ошибке (exampleParam выше).

Вы согласны или не согласны с моей позицией по обработке откатов транзакций в хранимых процедур? (отсутствие)

Есть ли у вас или можете ли вы написать пример лучше шаблонного вместе с описанием того, где мой подход не дотягивает и почему ваша версия может быть лучшей отправной точкой

Что о значение xact_abort {ВКЛ | ВЫКЛ}? Какой параметр для параметр xact_abort бы быть лучшей практике?



1208
10
задан 7 октября 2011 в 07:10 Источник Поделиться
Комментарии
1 ответ

В целом, это хорошая идея. Рассматривали ли вы двигаться ваши переводы строк и уловить логику; или его часть; для многократного функция? Это поможет обеспечить; везде, где он используется; что она останется неизменной и вы не имеют тот же код повсюду.

5
ответ дан 19 декабря 2011 в 08:12 Источник Поделиться