22. juni 2005 - 11:15Der 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.
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
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.
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?
Jeg kan ikke hjælpe dig. Blot understrege at alle tabeller skal have en primærnøgle.
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.