SQL中EXEC sp_readerrorlog如何使用日期参数筛选当前日期日志
答案
可以实现,sp_readerrorlog 本身就支持传入起始时间、结束时间作为筛选参数,你可以直接构造当前日期的起止时间传入即可。
sp_readerrorlog 可用参数说明
- 第1位:错误日志编号(0为当前活动日志,1为上一个归档,以此类推,对应你代码里写的6)
- 第2位:日志类型(1=SQL Server错误日志,2=SQL Server代理日志,默认值为1)
- 第3位:日志内容包含的第一个关键词(可选,无内容筛选需求填NULL)
- 第4位:日志内容包含的第二个关键词(可选,无内容筛选需求填NULL)
- 第5位:日志记录的起始时间
- 第6位:日志记录的结束时间
- 第7位:结果排序方式(可选,
ASC/DESC,默认DESC按时间倒序)
实现代码示例
筛选今日0点到当前时间的对应日志,语句如下:
DECLARE @TodayStart DATETIME = CAST(GETDATE() AS DATE); DECLARE @Now DATETIME = GETDATE(); EXEC sp_readerrorlog 6, -- 你指定的日志编号 1, -- 筛选SQL Server错误日志,要查代理日志可改为2 NULL, -- 无需按内容关键词筛选则填NULL,有需求替换为对应字符串即可 NULL, -- 第二个内容筛选关键词同理 @TodayStart,-- 起始时间:今日0点 @Now, -- 结束时间:当前时间 'ASC' -- 按时间正序排列,需要倒序可改为DESC
如果要匹配今日完整自然日(截止到当日23:59:59.999),把结束时间参数替换为DATEADD(ms, -3, DATEADD(day, 1, @TodayStart))即可。注意不需要内容筛选时,第3、4位必须显式填NULL,不能留空,否则会出现参数错位问题。
内容的提问来源于stack exchange,提问作者Trini DBA
相关产品推荐
相关产品推荐

