07. september 2007 - 23:50Der er
3 kommentarer og 1 løsning
Trigge exception ved delete hvis parent har children
Jeg har en one-to-many relation defineret mellem to tabeller. Jeg ønsker, at det ikke skal være muligt at delete en række i parent tabellen, såfremt der findes tilhørende rækker i child tabellen.
Hvad er den mest effektive (mht db performance) måde at opnå dette ?
Jeg kunne i princippet selv checke om en række har children, inden jeg tillader en delete af rækken, men jeg forestiller mig DBMS'en kan gøre det meget mere effektivt. Kan den levere en exception i dette tilfælde? Hvis det er måden at gøre det på, hvordan lokkes den til det ?
CREATE TABLE postby ( postnr INTEGER NOT NULL PRIMARY KEY, postby VARCHAR(20) ) GO CREATE TABLE addresse ( id INTEGER NOT NULL PRIMARY KEY, vejnavn VARCHAR(50), vejnr INTEGER, postnr INTEGER ) GO CREATE TRIGGER postnr_check ON postby FOR DELETE AS IF EXISTS(SELECT * FROM addresse WHERE postnr = (SELECT postnr FROM DELETED)) BEGIN RAISERROR ('Hold fingrene fra det her postnummer', 16, 1) END GO
Jeg har problemer med : postnr INTEGER CONSTRAINT postnr_fk_c REFERENCES postby(postnr)
kan ikke lige finde en måde at gøre det på inde i VS. Findes der en ?
Jeg har bladret lidt mere i dokumentationen for sql, og deraf lader det til, at hvis jeg laver en FK_Child_Parent og siger:ON DELETE = NO ACTION så vil jeg få den ønskede exception, hvis jeg prøver at delete en parent og der eksisterer børn. Dette kan jeg nemt få adgang til i VS.
Jeg kunne ikke drømme om at bruge en IDE som database administrations værktøj, så det har jeg ingen anelser om.
Og et svar.
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.