我有一個執行不同的存儲過程,並通過調用但每次另一個存儲過程AuditLogProcDetails
記錄的StartTime
和不同的存儲過程執行的EndTime
這個AuditLogProc
存儲過程如下面的代碼:SQL Server代碼優化
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dba].[AuditLogProc]
@Id AS INT,
@ProcessId AS INT
AS
BEGIN
TRY
SELECT @StartTime = GETDATE();
EXEC AppPopTimeInc @Id, @ProcessId;
BEGIN
EXEC [dba].[AuditLogProcDetails] @Id, @ProcessId, 'Exiting AppPopTimeInc', @StartTime, GETDATE()
END
SELECT @StartTime = GETDATE();
EXEC AppPopTimeIncDetails @Id, @ProcessId;
BEGIN
EXEC [dba].[AuditLogProcDetails] @Id, @ProcessId, 'Exiting AppPopTimeIncDetails', @StartTime, GETDATE()
END
SELECT @StartTime = GETDATE();
EXEC AppObsResultsAggInc @Id, @ProcessId;
BEGIN
EXEC [dba].[AuditLogProcDetails] @Id, @ProcessId, 'Exiting AppObsResultsAggInc', @StartTime, GETDATE()
END
SELECT @StartTime = GETDATE();
EXEC AppPricedDetailsInc @Id, @ProcessId;
BEGIN
EXEC [dba].[AuditLogProcDetails] @Id, @ProcessId, 'Exiting AppPricedDetailsInc', @StartTime, GETDATE()
END
SELECT @StartTime = GETDATE();
EXEC AppPricedDetailsIncDetails @Id, @ProcessId;
BEGIN
EXEC [dba].[AuditLogProcDetails] @Id, @ProcessId, 'Exiting AppPricedDetailsIncDetails', @StartTime, GETDATE()
END
SELECT @StartTime = GETDATE();
EXEC AppLoggedData @Id, @ProcessId;
BEGIN
EXEC [dba].[AuditLogProcDetails] @Id, @ProcessId, 'Exiting AppLoggedData', @StartTime, GETDATE()
END
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = error_message(),
@errorState = error_state();
RAISERROR (@ErrorMessage, @ErrorState);
END CATCH
RETURN
我的問題是:
這是叫個最好的辦法每一次在不同的存儲過程被調用後,每次都調用相同的過程
AuditLogProcDetails
,即包括BEGIN
和END
塊?由於
AuditLogProcDetails
過程被多次調用,我怎樣才能更好地重構它?
這有幫助,謝謝 – ronan