webForumDet fria alternativet

SQL Server 2005, Rekursiva SP med Cursors

2 svar · 425 visningar · startad av BrutalDeluxe

BrutalDeluxeMedlem sedan nov. 200650 inlägg
#1

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?

BrutalDeluxeMedlem sedan nov. 200650 inlägg
#2

Ah, jag löste det...

Det går att deklarera lokala cursors, iallafall i SQL Server 2005. Bara att skriva LOCAL efter CURSOR :)

@ndersMedlem sedan juni 200032 969 inlägg
#3

Tråden flyttas från Databashanterare.

mvh

128 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)