16. december 2002 - 17:03Der er
6 kommentarer og 2 løsninger
Problem med afvikling af trigger
Jeg har på en tabel lavet en update trigger, der opdaterer nogle data i andre tabeller.
Når jeg ændrer et bestemt felt på en vilkårlig post manuelt (via enterprise manager) virker triggeren fint.
Når jeg ændrer samme felt på alle poster i tabellen via en stump SQL kode, virker triggeren tilsyneladende ikke. Jeg har selvfølgelig kontrolleret at det felt jeg opdaterer via SQL koden rent faktisk bliver ændret.
På en oracle database kan en trigger relateres til enten at fyre på rækkebasis eller på statement basis. Jeg vil gætte på, at en MS SQL har lignende ting, samt at din trigger er sat til at fyre på "statement niveau" - men nu har du jo heller ikke bragt koden til triggeren, så det er og bliver et gæt.
Det kunne lyde som om din trigger kun opdaterer en enkelt row og da en trigger kun bliver kaldt en gang uanset antallet af rows som bliver ændret bliver kun den sidste row ændret.
CREATE TRIGGER [your_triggername] ON [table1] FOR UPDATE AS IF @@rowcount = 0 RETURN DECLARE @id AS INT SELECT @id = id FROM DELETED UPDATE table2 SET f1 = value1, f2=value2 WHERE id = @id
Problemet med janus_007 kode er, at den virker som arnebjarne har lavet sin kode. Dvs at selvom flere rækker UPDATES i table1 i et hug, som kører koden kun for en af rækkerne. Koden burde i stedet være:
UPDATE table2 SET f1 = value1, f2=value2 WHERE id in (select id from DELETED)
kichian ->> det er heller ikke korrekt (den gør det samme som min)!! - Der mangler et join til inserted row!! (til dem der ikke lige ved det, består en update egentlig af en delete og en insert), således her:
CREATE TRIGGER [your_triggername] ON [table1] FOR update AS IF @@rowcount = 0 RETURN
IF UPDATE(field1) --< det pågældende felt der udløser triggeren UPDATE tabl1 SET field2 = value1 --< og feltet der ønskes updatet, med værdi FROM INSERTED JOIN table1 ON table1.id = INSERTED.id
Jeg beklager at jeg ikke har givet jer pointene før. Jeres svar virker helt fint, og i min befippelse over at have fået det til at virke glemte jeg helt at svare. Jeg har valgt at dele pointene mellem jer.
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.