Du kan lave en rekursiv stored procedure, der ser på om der er nogen rækker hvor Parent=@IDToDelete; for hver af disse rækker kalder denne stored procedure sig selv og endelig sletter den rækken @IDToDelete.
Min første tanke var egentlig at lave en reel rekursiv procedure med en cursor til at holde styr på, hvor langt den var nået - men det viser sig at cursoren bliver lukket når man kalder en stored procedure, hvilket gav problemer.
Så jeg har lavet flg. eksempel i stedet, som gør det samme: CREATE PROCEDURE [dbo].[DeleteMenu] @IDToDelete int AS BEGIN TRANSACTION -- midlertidig tabel DECLARE @tmp TABLE ( ID int ) ;
-- INSERT root INSERT INTO @tmp ( ID ) VALUES ( @IDToDelete ); WHILE @@ROWCOUNT <> 0 BEGIN -- Find children "rekursivt" INSERT INTO @tmp SELECT ID FROM tblMenu WHERE Parent IN ( SELECT ID FROM @tmp ) AND NOT ID IN ( SELECT ID FROM @tmp ); END -- Slet alle fundne ID's DELETE FROM tblMenu WHERE ID IN ( SELECT ID FROM @tmp ); COMMIT TRANSACTION GO
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.