我正在做一些非常具体的事情,所以我希望其他人对哪种方法可能有效有所了解。
我正在尝试做到这一点,因此每5分钟运行一次的监视脚本不会使每个人收到多余的通知。我正在尝试使用SQL来平衡负载,但是我在努力提出所需的查询。
我已经设置了这张桌子:
Create Table MonitorDetails (
MonitorID int IDENTITY(1,1) PRIMARY KEY,
IssueType nvarchar(255) Not Null,
IssueDetails Nvarchar(max) not null,
Hostname nvarchar(255),
Criticality int not null,
ReportedTime Datetime not null,
ResolvedTime Datetime,
NotificationSent bit Default 0
)
所有失败都转储到该表中。
所以这是一个例子:
我正在运行的脚本将查看表中的记录,我希望第一次记录错误时发送通知并设置通知标志,但是如果错误再次出现并且通知已已经发送,它将不会发送其他通知。
查找重复项很容易,但是如何排除其中一个记录已设置通知标记的重复项(或批量更新重复项)?
SELECT
IssueType, IssueDetails, Hostname, Criticality, ReportedTime, COUNT(*)
FROM
MonitorDetails
Where ResolvedTime is null
GROUP BY
IssueType, IssueDetails, Hostname, Criticality, ReportedTime
HAVING
COUNT(*) > 1
我可能会考虑这个问题,但是我试图使查询保持轻量级,以免对SQL Server本身造成负担。有人有建议吗?
答案 0 :(得分:1)
将MAX(NotificationSent)添加到选择列表。如果值为1,则已经发送通知。
如果您只想返回那些未发送通知的消息,请更新HAVING条件:
HAVING COUNT(*) > 1 AND MAX(NotificationSent)=0