22. februar 2006 - 14:11Der er
14 kommentarer og 1 løsning
Vælge alt andet end arbejdsdage/tider
Min trigger skal sende en mail når en indsat record's værdi overskrider en grænseværdi, men den skal kunne konfigureres til at virke på bestemte tidspunkter. Det klares sådan her.
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')) AND not exists (SELECT * FROM deleted WHERE Måler= + @Maaler_var) AND @SendMail_var = -1
Nu er kravet så at tidsrummet IKKE skal gælde for weekender! Hvordan undersøger man (i en trigger) om en given dato er en lørdag/søndag?
Jeg har modificeret IF'en til følgende (så skulle jeg slippe for mails på hverdage i arbejdstiden) 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 (DATEPART(dw, GETDATE()) >=6)) AND not exists (SELECT * FROM deleted WHERE Måler= + @Maaler_var) AND @SendMail_var = -1
Der er dog en fejl idet sidste OR del kun checker om ugedagen på GETDATE er = eller større end 6. Der var tonsvis af mails (>8000)i min indbakke her til morgen, alle fra d.d. (00:14 og frem)! Så lærte jeg også at fredag, på vores server åbenbart betragtes som en weekend-dag, selvom Regional Options er sat til Danish/Denmark på serveren (Windows 2003 Server). Hvordan skal DATEPART(dw, GETDATE()) så se ud?
Du kan sætte SET DATEFIRST 1 lige der hvor du har brug for den.
Synes godt om
Ny brugerNybegynder
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.