Triggers - opdatere tabel
P.t. ser min trigger sådan her ud:CREATE TRIGGER "Temperatur_Alert"
ON [Aflæsninger]
AFTER UPDATE, INSERT
AS
/* Mandag er første dag i ugen, hvis udeladt, er søndag første dag i ugen) */
SET DATEFIRST 1
DECLARE
@recipients_var as varchar(255),
@subject_var as varchar(255),
@Message_var as varchar(255),
@Maaler_var as varchar(255),
@LimitValue_var as varchar(255),
@Value_var as varchar(255),
@SendSMS_var as varchar(255),
@SendMail_var as varchar(255),
@TidsrumStart_var as varchar(255),
@TidsrumSlut_var as varchar(255)
DECLARE MålerAlarmer_cursor CURSOR FOR
SELECT Mail, Subject, LimitValue, Måler, SendSMS, SendMail, TidsrumStart, TidsrumSlut
FROM MålerAlarmer WHERE AlarmAktiveret = 1
OPEN MålerAlarmer_cursor
FETCH NEXT FROM MålerAlarmer_cursor
INTO @recipients_var, @Subject_var, @LimitValue_var, @Maaler_var, @SendSMS_var, @SendMail_var, @TidsrumStart_var, @TidsrumSlut_var
WHILE @@FETCH_STATUS = 0
BEGIN
IF Exists (SELECT * FROM inserted WHERE (Måler= + @Maaler_var AND Tæller > + @LimitValue_var AND Klokkeslæt BETWEEN + '00:00:00' AND @TidsrumStart_var) OR (Måler= + @Maaler_var AND Tæller > + @LimitValue_var AND Klokkeslæt BETWEEN @TidsrumSlut_var AND '23:59:59') OR (Måler= + @Maaler_var AND Tæller > + @LimitValue_var AND DATEPART(dw, GETDATE()) >=6))
AND not exists (SELECT * FROM deleted WHERE Måler= + @Maaler_var) AND @SendMail_var = -1
BEGIN
SELECT @Value_var = (SELECT Tæller FROM inserted WHERE Måler= + @Maaler_var AND Tæller > + @LimitValue_var )
SELECT @Message_var = 'Temperaturen for måler ' + @Maaler_var + ' er: ' + @Value_var + Char(13) + Char(10) + '(Grænseværdi: ' + @LimitValue_var + ')'
EXEC master..xp_sendmail
@recipients = @recipients_var,
@subject = @subject_var,
@message = @Message_var
END
FETCH NEXT FROM MålerAlarmer_cursor
INTO @recipients_var, @Subject_var, @LimitValue_var, @Maaler_var, @SendSMS_var, @SendMail_var, @TidsrumStart_var, @TidsrumSlut_var
END
CLOSE MålerAlarmer_cursor
DEALLOCATE MålerAlarmer_cursor
Den kunne jeg godt tænke mig ændret så:
Når triggeren afvikles, checkes der i en tabel, Alarms, om den aktuelle målers tæller er mindre end 3. Hvis den er det, skal tælleren tælles 1 op, hvis tælleren er større end 3, skal tæller nulstilles (tællerværdien skal gemmes i en variabel, så den senere kan bruges til at afgøre om der skal sendes en mail eller ikke).
Men det bliver værre endnu! ;)
Triggeren som opdaterer skal checke et tidsstempel i samme tabel, sådan, at uanset om triggeren er mindre end eller lig med 3, skal tælleren nulstilles hvis tidsstemplet er ældre end 2 timer.