Avatar billede netro Nybegynder
16. april 2006 - 19:38 Der er 4 kommentarer og
3 løsninger

On Delete Cascade i samme tabel

Hvordan får jeg slettet alle poster med RefID = 2, når posten med ID = 2 slettes? Feltet til at angive denne action er deaktiveret i Management Studio / VS, når nøglerne ligger i samme tabel.

ID  RefID
1      null
2      1
3      2
4      2
5      4
Avatar billede arne_v Ekspert
16. april 2006 - 21:18 #1
jeg kan ikke lige forklare hvorfor cascade delete ikke ksulle virke med self reference

men kan du ikke lave en delete trigger ?
Avatar billede netro Nybegynder
16. april 2006 - 21:44 #2
Det må vel blive løsningen. Er der ikke noget galt her?

ALTER TRIGGER Trigger1
ON dbo.Tabel
INSTEAD OF DELETE
AS
BEGIN
    DECLARE @ID INT;
    SELECT @ID = ID FROM Deleted;
    DELETE FROM Tabel WHERE RefID = @ID;
END
Avatar billede Slettet bruger
17. april 2006 - 07:13 #3
IMHO, lav en stored procedure - det er mere ligefrem end en trigger,

create procedure deleteWithId(@id int) AS

BEGIN TRANSACTION

DELETE FROM Tabel WHERE RefID = @id
DELETE FROM Table WHERE ID = @id

COMMIT TRANSACTION
Avatar billede netro Nybegynder
17. april 2006 - 14:57 #4
Nu har jeg også løst det med en stored procedure, for jeg fandt ud af, at instead-of-triggers ikke kan være rekursive. Dit eksempel her er dog ikke tilstrækkeligt, da det kun sletter første niveau af childs. Det kan gøres ved at samle alle ID'er på objekter, der skal slettes, i en temp-tabel. Herefter kan alle poster, der har et match i temp-tabellen, slettes på én gang.
Avatar billede netro Nybegynder
17. april 2006 - 14:59 #5
I kan bare lægge svar, så deler vi.
Avatar billede arne_v Ekspert
17. april 2006 - 15:50 #6
ok
Avatar billede Slettet bruger
18. april 2006 - 07:32 #7
ok
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