Avatar billede dougheffernan Nybegynder
22. februar 2006 - 14:11 Der 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?
Avatar billede the_party_dog Nybegynder
22. februar 2006 - 14:15 #1
DATEPART(dw, GETDATE())

vil vist nok fortælle dig om det er den 6. eller 7. dag.

Husk at tage højde for om din server kører dansk eller engelsk.
Avatar billede dougheffernan Nybegynder
22. februar 2006 - 14:19 #2
Jeg kan se at der i BOL står
Constant          Value    Description
SQLDMOWeek_WeekEnds    65    Saturday and Sunday

Men hvordan får jeg det ind i min IF?
Avatar billede the_party_dog Nybegynder
22. februar 2006 - 14:23 #3
Tror du skal satse på det med date part. Det kan du ligge direkte ind i din where statement.
AND DATEPART(dw, GETDATE()) <= 5
Avatar billede dougheffernan Nybegynder
22. februar 2006 - 14:45 #4
Ja, det må jeg prøve, men hvordan finder jeg ud af om ugen starter med en søndag eller mandag på vores server? Er det bare at kigge i System Locales?
Avatar billede dougheffernan Nybegynder
22. februar 2006 - 14:48 #5
Well, i Regional and Language Options -> Regional Options på serveren står der Danish i feltet Standards and Formats.
Avatar billede dougheffernan Nybegynder
22. februar 2006 - 14:50 #6
Og Server Collation på SQL Server'en er sat til
Danish_Norwegian_CI_AS
Avatar billede dougheffernan Nybegynder
22. februar 2006 - 14:53 #7
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
Avatar billede the_party_dog Nybegynder
22. februar 2006 - 14:55 #8
Ja, det må man jo forvente med det du har lavet :-)
Avatar billede dougheffernan Nybegynder
22. februar 2006 - 15:12 #9
;)
Avatar billede dougheffernan Nybegynder
22. februar 2006 - 15:12 #10
Takker.
Avatar billede dougheffernan Nybegynder
24. februar 2006 - 08:46 #11
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?
Avatar billede dougheffernan Nybegynder
24. februar 2006 - 08:53 #12
Kan man sætte i Triggeren om det er mandag eller søndag der er første dag i ugen?
Avatar billede dougheffernan Nybegynder
24. februar 2006 - 09:16 #13
Jeg kan se at det skal være
SET DATEFIRST 1
Men hvor i triggeren skal dette sættes ind? Øverst (før/efter DECLARE statementet)?
Avatar billede dougheffernan Nybegynder
24. februar 2006 - 09:21 #14
Jeg har bare sat den ind ligefør DECLARE...
Avatar billede the_party_dog Nybegynder
24. februar 2006 - 09:24 #15
Virker det?

Du kan sætte SET DATEFIRST 1 lige der hvor du har brug for den.
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