Hi All
I have heard so much about not using cursors but sometimes cant find away around them. To make things worse I use temporary tables as well. Here is a procedure I wrote to return data for a pyramid reporting structue for 'n' levels. If some one could advise a better way to do this then I would appreciate it.
tblMLMRel contains just 2 columnms which are indexed.
Stored procedure.
@STRAID int,
@CNTLVL int
AS
SET NOCOUNT ON
CREATE TABLE #TMP1
(
LVL int Not Null,
AID int Not Null,
BID int Not Null
)
Declare @LVL int
SET @LVL = 1
INSERT #TMP1
SELECT LVL = LVL ,
AID ,
BID
FROM (SELECT AID = AID,
BID = BID,
LVL = @LVL
FROM ( Select MLMAID AS AID,
MLMBID AS BID
From tblMLMRel
Where MLMAID = @STRAID ) tmpSelect
) tmpResult
Set @LVL = @LVL + 1
While (@LVL <= @CNTLVL)
Begin
Declare Cursor1 CURSOR For
Select BID from #TMP1 Where LVL = (@LVL -1)
Open Cursor1
FETCH NEXT FROM Cursor1 INTO @STRAID
WHILE (@@FETCH_STATUS=0)
BEGIN
INSERT #TMP1
SELECT LVL = LVL ,
AID ,
BID
FROM (SELECT AID = AID,
BID = BID,
LVL = @LVL
FROM (Select MLMAID AS AID,
MLMBID AS BID
From tblMLMRel Where MLMAID = @STRAID ) tmpSelect
) tmpResult
FETCH NEXT FROM Cursor1 INTO @STRAID
END
Close Cursor1
DEALLOCATE Cursor1
Set @LVL = @LVL + 1
End
Select #TMP1.LVL,
#TMP1.AID,
#TMP1.BID,
From #TMP1
SET NOCOUNT OFF