我有一个执行不同的存储过程,并通过调用但每次另一个存储过程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