Search code examples
sqlsql-servercursor

A cursor with the name 'MY_CURSOR' already exists


I try to get data by cursor such as below code but get error that :

A cursor with the name 'MY_CURSOR' already exists.

I search and found out that I should use LOCAL word in definition of cursor such as DECLARE MY_CURSOR LOCAL CURSOR but get error again that

Invalid usage of the option local in the DECLARE CURSOR statement.

How can i fix this?

DECLARE @tag AS NVARCHAR(1000)
DECLARE @tempTbl AS TABLE (tagcol NVARCHAR(1000))
DECLARE MY_CURSOR LOCAL CURSOR 
FOR
    SELECT bt.Tag
    FROM   BlogTable AS bt
    WHERE  bt.IsEnglish = 0
           AND bt.IsActive = 1
           AND bt.IsDelete = 0

OPEN MY_CURSOR   
FETCH NEXT FROM MY_CURSOR INTO @tag
WHILE @@FETCH_STATUS = 0
BEGIN
    INSERT INTO @tempTbl
    SELECT *
    FROM   dbo.FunSpliteStr(@tag, '،') 

    FETCH NEXT FROM MY_CURSOR INTO @tag
END

CLOSE MY_CURSOR 
DEALLOCATE MY_CURSOR

SELECT tagcol
FROM   @tempTbl AS tt
GROUP BY
       tt.tagcol

Solution

  • TRY THIS: It's also a way of doing that

    DECLARE @tag AS NVARCHAR(MAX)
    
    SELECT @tag = COALESCE(@tag + ',', '') + bt.Tag
    FROM   BlogTable AS bt
    WHERE  bt.IsEnglish = 0
            AND bt.IsActive = 1
            AND bt.IsDelete = 0
    
    SELECT *
    FROM dbo.FunSpliteStr(@tag, '،')