webForumDet fria alternativet
Logga in / Bli medlem

SQL Server 2005, Rekursiva SP med Cursors

Databaser & SQL

2 svar · 427 visningar · startad av BrutalDeluxe

Medlem sedan nov. 200650 inlägg
Frågan#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?

Medlem 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 :)

Medlem sedan juni 200032 967 inlägg
#3

Tråden flyttas från Databashanterare.

mvh

256 ms totalt · 4 externa anrop · v20260731065814-full.14655e19
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)