Avatar billede ghazaleh Nybegynder
16. september 2005 - 09:42 Der er 5 kommentarer og
1 løsning

Fejl i trigger

Jeg har lavet den nedenstående trigger. Jeg kan godt lægge den ind på databasen og jeg kan godt køre triggeren, hvis den ikke går ind i if-sætningen, men når den går ind i if-sætningen, så går mit program ned. Er der nogen der kan se hvorfor?

CREATE TRIGGER NyAftale ON Agr
FOR INSERT,UPDATE
AS
BEGIN
  DECLARE
  @tempdato DATETIME,
  @temptildato DATETIME,
  @tempdatodiff INTEGER,
  @tempdatoplus DATETIME,
  @aftalenr INTEGER,
  @aftaleactno INTEGER,
  @fradato INTEGER,
  @tildato INTEGER,
  @frakl INTEGER,
  @tilkl INTEGER,
  @aktoernr INTEGER,
  @kontaktperson INTEGER,
  @beskrivelse CHAR,
  @udfoert INTEGER,
  @udfoertdato INTEGER,
  @gr6 INTEGER,
  @gr7 INTEGER

  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
Avatar billede claesdamlund Nybegynder
17. september 2005 - 00:52 #1
Burde du ikke bytte om på dato-variablene i denne linie, så ældste dato kommer først? (Kan ikke huske om SQL Server fejler i DateDiff hvis dato1 er nyere end dato2):

SET @tempdatodiff = DATEDIFF(d, @temptildato, @tempdato)
Avatar billede ghazaleh Nybegynder
20. september 2005 - 14:49 #2
Der er ingen forskel selvom jeg bytter om på datoerne, men nu har jeg fundet ud af at hvis jeg fjerner min insert sætning, så får jeg ingen fejl. Hvad kan der være galt med den?
Avatar billede claesdamlund Nybegynder
20. september 2005 - 15:07 #3
Prøv at lave en test, hvor du udfører en "almindelig" insert/values, med de værdier som din kode genererer (dvs. med hardcoded værdier), og se om den evt. fejler på datatyper - du laver jo lidt typecasting undervejs i din procedure.
Avatar billede ghazaleh Nybegynder
30. september 2005 - 08:57 #4
Hmm ja det vidste sig at jeg har haft nogle forkerte værdier med i min insert. Jeg skulle bare have et lille skub i den rigtige retning :-)

Læg et svar
Avatar billede ghazaleh Nybegynder
15. marts 2006 - 16:35 #5
Jeg lukker spørgsmålet om et par dage medmindre du når at lægge et svar inden ;-)
Avatar billede claesdamlund Nybegynder
15. marts 2006 - 23:43 #6
Her er et svar - bedre sent end aldrig :o)
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