大家好,我有这个查询,它返回过去几分钟内发生的具有不同事件 ID 的日志:
SELECT LogEventID, LogMessage, LogTime
FROM Database.dbo.ApplLog
WHERE (LogEventID LIKE 14
OR LogEventID LIKE 20
OR LogEventID LIKE 27
OR LogEventID LIKE 40
OR LogEventID LIKE 41
OR LogEventID LIKE 42)
AND LogTime < CURRENT_TIMESTAMP
AND LogTime > DateADD(mi, -5, CURRENT_TIMESTAMP);
例如结果如下:
日志事件ID | 日志消息 |
---|---|
四十二 | 传输新事件 XYZ 时出错 |
四十二 | 传输新事件 XYZ 时出错 |
20 | 传输更新的事件 XYZ 时出错 |
还有 4 个 EventID。大多数情况下,其他 EventID 不会生成日志。在我们的监控解决方案中,我设置了一个定期执行此查询的传感器。长话短说,我无法正确设置传感器,因为并非所有 EventID 都在过去几分钟内同时生成日志。
我的问题是:如何输出包含所有 LogEventID 但 LogMessages 为空的虚假行,这样我就可以在每个查询结果中都获得过去几分钟内未生成日志的所有 LogEventID?就像这样:
日志事件ID | 日志消息 |
---|---|
四十二 | 传输新事件 XYZ 时出错 |
四十二 | 传输新事件 XYZ 时出错 |
20 | 传输更新的事件 XYZ 时出错 |
14 | |
二十七 | |
40 | |
41 |
我看过这篇文章,但我不明白解决方案,而且它比(感觉)需要的要复杂得多。提前感谢你的帮助。
“空行”是通过使用“外连接”产生的。
您需要一个包含您感兴趣的 ID 的“虚拟表”,然后将其“左连接”到实际日志表,类似于此(未经测试)。
请注意,“外连接”表上的过滤器已移至连接条件。
如果您尝试在外连接表中的字段上使用 where 子句,大多数 DBMS 会将连接“折叠”为常规的“内连接”。