Avatar billede teepee Nybegynder
22. juni 2005 - 11:15 Der er 2 kommentarer og
1 løsning

Trigger der skal rette samme række som insertes

Hvordan laver jeg en trigger som retter i den række som indsættes? Lad os sige at tabellen har tre kolonner felt1, felt2 og felt3. Nu insertes rækken med en værdi for felt1 og felt2. Felt3 skal en insert trigger udfylde med summen af de to første felter (eksempelvis). PS: Rækkerne i tabellen har ingen særlige kendetegn og derfor ingen primærnøgle.
Avatar billede ldanielsen Nybegynder
23. juni 2005 - 14:02 #1
Du skal jo fortælle databasen hvilken post der skal updates. Det gør du ved at angive en værdi for et eller flere felter, som du ser nedenunder. Jeg beder den om at gøre det for kolonner hvor værdien i felt1 findes i "inserted", som er en slags tabel over rækker der er ændret.

Derfor er det bedst at have en unik værdi, så vil den ikke køre for flere kolonner end nødvendigt.

CREATE TRIGGER [t_TriggerNavn] ON [dbo].[Tabelnavn]
FOR UPDATE, INSERT
AS
UPDATE TabelNavn SET felt3 = felt1 + felt2 WHERE felt1 IN
(SELECT felt1 FROM inserted)

Men at du ikke har en unik kolonne, som er defineret som PRIMARY KEY er en stor fejl. Det gør det meget svært for serveren at anvende data. Allerede når der er få hundrede poster vil du kunne mærke en forringelse af ydelsen, men hvis du tilføjer en kolonne med datatype int, sat til IDENTITY og PRIMARY KEY vil du kunne trække data ud på et splitsekund selv om der er 100.000-vis af poster.
Avatar billede teepee Nybegynder
23. juni 2005 - 14:20 #2
Problemet er netop at værdierne ikke kan identificeres unikt. I Oracles triggere kan du referere til :NEW.felt3 og sætte det til hvad du har lyst til og så bliver der derefter indsat i tabellen. MSSQL kommer og fortæller dig hvad der er indsat via inserted, hvilket jeg finder begrænset anvendeligt. Kan man lave noget INSTEAD OF insert trigger som stadig indsætter en række, og uden at denne selvfølgelig trigger den samme INSTEAD OF insert trigger på tabellen?
Avatar billede ldanielsen Nybegynder
23. juni 2005 - 15:27 #3
Jeg kan ikke hjælpe dig. Blot understrege at alle tabeller skal have en primærnøgle.
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