我有一个过程可以将数据从一张表插入到另一张表,而一次则需要5分钟,而下一次则需要15分钟。 我要编写代码,以便在该过程花费10分钟以上的时间后在我的日志表中创建日志。我可以使用ms sql中是否存在任何函数或时间计数器?
答案 0 :(得分:4)
将以下几行添加到您的SP中,它应该可以工作:
ALTER PROCEDURE YourSP
AS
BEGIN
DECLARE @StartTime AS DATETIME = GETDATE();
... <Your current lines>
IF DATEDIFF(mi, @StartTime, GETDATE()) > 10
INSERT INTO LogTable <YourFields>, MinutesSpent
VALUES <YourValues>, DATEDIFF(mi, @StartTime, GETDATE())
END
答案 1 :(得分:2)
这个评论太长了。
为什么只记录对存储过程的特定调用?您应该记录 all 调用并过滤出所需的调用。本周您可能会对超过10分钟的时间感兴趣。下周,数据可能会增加,可能需要12分钟。 或者,您可以更改代码以使其更高效,并且应在2分钟内完成。
如果您只对计时感兴趣,我会写一个相当通用的日志表,如下所示:
create table spTimeLog (
procedureName varchar(255),
startDateTime datetime
endDateTime datetime,
createdAt datetime default getdate()
);
create procedure usp_proc . . .
begin
declare @StartTime datetime = getdate();
. . .
insert into spTimeLog (procedureName, startDateTime, endDateTime)
values ('usp_proc', StartTime, getdate());
end;
然后,您可以在查询表时获取所需的信息:
select count(*)
from spTimeLog tl
where tl.procedureName = 'usp_proc' and
endDateTime > dateadd(minute, 10, startDateTime);
通常,当我为实际应用程序编写存储过程时,存储过程进入和退出时(无论成功与否)都会生成审核日志。
答案 2 :(得分:1)
您可以尝试这种方式
declare @start datetime = getdate()
-- your SQL statements
exec dbo.MyStoredProcedure
declare @executionTimeInMilliseconds int = datediff(ms, @start, getdate())