---
title: "SQL Server 2005, Rekursiva SP med Cursors"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/157040-sql-server-2005-rekursiva-sp-med-cursors"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "BrutalDeluxe"
published: "2007-02-10T18:30:04.000Z"
updated: "2007-02-10T18:46:41.000Z"
replies: 2
views: 427
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/157040-sql-server-2005-rekursiva-sp-med-cursors"
---

# SQL Server 2005, Rekursiva SP med Cursors

## #1 — BrutalDeluxe, 2007-02-10T18:30Z

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?

Permalänk: https://www.webforum.nu/p/157040

## #2 — BrutalDeluxe, 2007-02-10T18:45Z

Ah, jag löste det... 

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

Permalänk: https://www.webforum.nu/p/1934110

## #3 — @nders, 2007-02-10T18:46Z

Tråden flyttas från Databashanterare.

mvh

Permalänk: https://www.webforum.nu/p/1934111

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/157040-sql-server-2005-rekursiva-sp-med-cursors
