Stored procedure med rekursiv select og delete
HejJeg vil gerne have lavet en stored procedure, der ud fra et ItemID, rekursivt kan finde alle children.
Jeg skal bruge denne funktion til både SELECT og DELETE.
Min tabel 'Item' indeholder 2 UNIQUEIDENTIFIERs 'ItemID' og 'ParentID'. ItemID er primærnøgle og ParentID peger på det item, som det er placeret under.
Sådan kunne en struktur f.eks. se ud (der er ikke et max antal levels).
- Item1
- Item2
- Item2a
- Item2b
- Item2b1
- Item2b1a
- Item2b1b
- Item2b2
- Item2b3
- Item2c
- Item2d
- Item3
- Item4
Jeg har prøvet mig lid frem, med denne SP, men den giver mig kun første Item.
CREATE PROCEDURE [dbo].[DeleteItem]
@ItemID UNIQUEIDENTIFIER
AS
BEGIN
DECLARE @ItemsToDelete TABLE (ID UNIQUEIDENTIFIER);
INSERT INTO @ItemsToDelete (ID) VALUES (@ItemID);
WHILE @@ROWCOUNT <> 0
BEGIN
INSERT INTO @ItemsToDelete
SELECT ItemID FROM Item WHERE ParentID IN (SELECT ID FROM @ItemsToDelete) AND NOT ItemID IN (SELECT ItemID FROM @ItemsToDelete);
END
--DELETE FROM Item WHERE ItemID IN ( SELECT ID FROM @ItemsToDelete );
SELECT * FROM @ItemsToDelete
END