Avatar billede dougheffernan Nybegynder
25. september 2006 - 09:54 Der er 1 løsning

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.
Avatar billede dougheffernan Nybegynder
22. november 2006 - 15:33 #1
*
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester