如果同一位置 (IP) 在 1 分钟内存在多个记录,则执行存储过程



每当将记录插入我的数据库时,都会触发一个触发器,该触发器将执行存储过程,以便在数据库满足条件时发送电子邮件警报。如果数据库中在一定时间内存在多条记录,我需要执行该过程(如果同一 IP 和登录类型在 1 分钟内存在 5 条记录(

IF (SELECT IP, COUNT(*) AS Counted
    FROM LOGS  
     AND Logs.TYPE = 'Visitor' 
    HAVING Counted >= 5
       AND IP > 1 
      AND ACCESSEDTIME > DATEADD(minute, -1, GetDate())) > 0
BEGIN
    -- my stored procedure
END

我认为它是这样的东西,但在你的例子中它不是那么清楚......

IF exists (Select ip, count(*) as counted from logs
where logs.type='Visitor' and
ACCESSEDTIME > DATEADD(minute, -1, GetDate())
Group by ip having count (*) >= 5)

然后你可以每分钟执行一次并进行测试,但它不是那么好。 或者,您可以使用分钟作为Group by子句的术语进行测试,从accessdtime中提取它(它如何取决于您的产品(。

请参阅下面的查询。细节不是很清楚,所以你可能需要做一些调整。

IF exists (SELECT IP,
COUNT(ip) AS Counted    
FROM LOGS     
where  Logs.TYPE = 'Visitor'   
group by ip
HAVING COUNT(ip) >= 5      
AND IP > 1 AND DATEDIFF(MINUTE, accessedtime, 
getdate())) =1
BEGIN
-- my stored procedure
END

最新更新