09. september 2005 - 10:02Der er
11 kommentarer og 1 løsning
Beregne ny dato i trigger
Jeg har denne her trigger:
CREATE TRIGGER NyAftale ON Agr FOR INSERT,UPDATE AS BEGIN DECLARE @aftaleactno INTEGER, @fradato INTEGER, @tildato INTEGER, @frakl INTEGER, @tilkl INTEGER, @aktoernr INTEGER, @kontaktperson INTEGER, @beskrivelse TEXT, @udfoert INTEGER, @udfoertdato INTEGER, @gr6 INTEGER, @gr7 INTEGER
SELECT @aftaleactno=AgrActNo, @fradato=FrDt, @tildato=ToDt, @frakl=FrTm, @tilkl=ToTm, @aktoernr=ActNo, @kontaktperson=LiaActNo, @beskrivelse=Descr, @udfoert=Fin, @udfoertdato=FinDt, @gr6=Gr6, @gr7=Gr7 FROM inserted IF (@udfoert = 1) AND (@gr7 = 0) BEGIN @fradato = @udfoertdato + tid til næste (@gr6) @tildato = @tildato - @fradato @tildato = @tildato + tid til næste (@gr6) INSERT INTO agr(FrDt,ToDt,FrTm,ToTm,ActNo,LiaActNo,Descr,Gr6) values (@fradato,@tildato,@frakl,@tilkl,@aktoernr,@kontaktperson,@beskrivelse,@gr6) UPDATE agr SET gr7 = 1 WHERE Agr.AgrActNo = @aftaleactno END END
De 3 linier:
@fradato = @udfoertdato + tid til næste (@gr6) @tildato = @tildato - @fradato @tildato = @tildato + tid til næste (@gr6)
Er ikke korrekte. Jeg skal have skiftet dem ud med 3 linier som beregner en ny dato ud fra antal dage. Dvs. @udfoertdato indeholder fx 20050909 og her skal jeg fx lægge 30 til så datoen bliver 20051009
Syntaks for cast og convert står også i hjælp, men ellers er det cast(@fradato as datetime) respektive convert(datetime, @fradato), men du kan ikke konvertere integers i dit format til en datetime, hvis du bruger cast forventer MS SQL at det integer du leverer er antal dage siden 1. januar 1900.
Men det ser også ud til at der er lidt kludder med dine beregninger - når du beregner @tildato i dine tre udtryk, så benytter du @fradato, som du lige har givet en ny værdi, så det går vel galt der?
Og det står mig ikke helt klart hvor "tid til næste(@gr6)" kommer fra, er det en konstant eller er det en funktion der leverer det resultat?
Tak for det. Nu kom jeg da så langt at min syntaks er korrekt og jeg kan køre triggeren på databasen, men når jeg gemmer i agr så triggeren starter, så melder programmet fejl og går ned, men kun hvis den går ind i if-sætningen. Er der nogen der kan se en fejl inde i if-sætningen? triggeren ser nu sådan her ud:
SELECT @aftalenr=AgrNo, @aftaleactno=AgrActNo, @fradato=FrDt, @tildato=ToDt, @frakl=FrTm, @tilkl=ToTm, @aktoernr=ActNo, @kontaktperson=LiaActNo, @beskrivelse=Descr, @udfoert=Fin, @udfoertdato=FinDt, @gr6=Gr6, @gr7=Gr7 FROM inserted IF (@udfoert = 1) AND (@gr7 = 0) AND (@gr6<>0) BEGIN SET @tempdato = CONVERT(datetime, @udfoertdato, 112) SET @tempdatoplus = DATEADD(d, @gr6, @tempdato) SET @udfoertdato = CONVERT(integer, @tempdatoplus)
SET @tempdato = CONVERT(datetime, @fradato, 112) SET @temptildato = CONVERT(datetime, @tildato, 112) SET @tempdatodiff = DATEDIFF(d, @temptildato, @tempdato) SET @tempdatoplus = DATEADD(d, @tempdatodiff, @tempdatoplus) SET @tildato = CONVERT(integer, @tempdatoplus)
SET @aftalenr = @aftalenr + 1
INSERT INTO agr(AgrActNo,AgrNo,FrDt,ToDt,FrTm,ToTm,ActNo,LiaActNo,Descr,Gr6) values (@aftaleactno,@aftalenr,@udfoertdato,@tildato,@frakl,@tilkl,@aktoernr,@kontaktperson,@beskrivelse,@gr6)
UPDATE agr SET gr7 = 1 WHERE Agr.AgrNo = @aftalenr END END
Nå så lukker jeg spørgsmålet igen, men tak for svarene i hvert fald
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.