sql-server - 如何记录存储过程执行运行时间
问题描述
只是在 SQL Server 中寻找存储过程的一些帮助。我经常遇到以下代码:
DECLARE @StartTime datetime
DECLARE @EndTime datetime
SELECT @StartTime=GETDATE()
-- Write Your Query
SELECT @EndTime=GETDATE()
--This will return execution time of your query
SELECT DATEDIFF(MS,@StartTime,@EndTime) AS [Duration in millisecs]
这只会将数据保存在输出面板(消息)中。我想知道是否可以将每次脚本的运行时间结果保存到表中。例如,可能看起来像这样的表:
CREATE TABLE Job_Batch(
JobID NVARCHAR(MAX),
JobDate NVARCHAR(MAX),
JobTime NVARCHAR(MAX),
JobDuration NVARCHAR(MAX),
JobStatus NVARCHAR(MAX)
)
该脚本还应该能够在每次运行时生成自己的 JobID。
解决方案
我把你的桌子改了一点,只是为了更好地捕捉到一些东西:
declare @job_batch table (
JobId int identity(1,1),
JobName varchar(255),
JobDate datetime,
JobElapsedMs int,
JobStatus nvarchar(4000)
);
让我做一个样本和临时程序来测试这个概念:
create or alter procedure #dummyProc as
begin
declare @i int = 0;
while @i < 100000
begin
set @i += 1;
end
end
下面的代码演示了将所需信息放入日志记录表中:
declare
@StartTime datetime = getdate(),
@JobStatus nvarchar(4000);
begin try
exec #dummyProc
set @JobStatus = 'Success';
end try
begin catch
set @JobStatus = error_message();
end catch
insert @job_batch (JobName, JobDate, JobElapsedMs, JobStatus)
values ('#dummyProc', @StartTime, datediff(ms,@StartTime,getdate()), @JobStatus);
当您查询 @job_batch 表时:
select * from @job_batch;
你得到这个:
+-------+------------+-------------------------+--------------+------------+
| JobId | JobName | JobDate | JobElapsedMs | Job Status |
+-------+------------+-------------------------+--------------+------------+
| 1 | #dummyProc | 2021-01-28 00:22:57.370 | 60 | Success |
+-------+------------+-------------------------+--------------+------------+
推荐阅读
- mysql - 如何使用 Laravel、MySql、JSON 按不同城市对订单进行分组
- heroku - Heroku - 应用程序在使用时可以回收吗?
- r - 在 R 中将表格绘制为 grob
- c - 查找最长的不重复子数组
- javascript - 在添加新过滤器之前重置过滤器
- c# - 我的 addforce 没有在应有的地方工作
- reactjs - 材质 UI:使用 onMouseLeave 道具时弹出窗口中断
- php - 如何在控制器中使用 laravel Auditor
- c++ - Divide et impera 数组错误的元素的总和
- c++ - 在 WM_CREATE 中加载多个位图的 C++ Win32 不会加载