Tja!
Jag har en kategori-tabell i min databas och den har ett beroende till sig själv enl. följande
CategoryID
ParentCategoryID
Jag har alltså huvudkategorier, underkategorier, under-underkategorier osv. Så långt är det ju inga konstigheter. Nu är det så att jag vill kunna inaktivera kategorierna och jag har en kolumn i databasen som heter IsActive. Om jag sätter IsActive till false (eller noll som är det är i det här fallet) på en föräldrakategori så ska även underkategorierna inaktiveras. Har försökt lösa detta med en SP som ser ut såhär:
CREATE PROCEDURE spInactiveCategory
@CategoryId int,
@DeleteChildren bit = 1
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Delete category
UPDATE Categories
SET IsActive = 0
WHERE CategoryId = @CategoryId
-- Delete children
IF @DeleteChildren = 1
BEGIN
DECLARE @ChildCategoryId int
DECLARE CategoryChildren CURSOR FOR
SELECT CategoryId
FROM Categories
WHERE ParentCategoryId=@CategoryId
OPEN CategoryChildren
FETCH NEXT FROM CategoryChildren
INTO @ChildCategoryId
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC dbo.spInactivateCategory @CategoryId = @ChildCategoryId
FETCH NEXT FROM CategoryChildren
INTO @ChildCategoryId
END
CLOSE CategoryChildren
DEALLOCATE CategoryChildren
END
END
GO
När jag kör proceduren får jag en massa felmeddelanden om att cursorn redan finns och att cursorn redan är öppen. Går det inte att göra så som jag vill eller kan man göra det på annat sätt?