Rekursiv udtræksliste
Hej Eksperter,Jeg har i min MSSQL database bl.a. følgende tabel:
- PageID (Int, PK)
- PageRefID (Int)
- PageTitle (Nvarchar(50))
Jeg skal et sted i koden bruge et komplet udtræk af alt indhold fra denne tabel. Til formålet benytter jeg følgende rekursive funktion:
Function FnBuildMovePageOption (CurrentPageID, CurrentPageLevel)
Set Query_pageList = objConnect.Execute("Select PageID, PageRefID, PageTitle From viewPage Where PageRefID = " & CurrentPageID & " And PageAreaID = " & Session("PageAreaID") & " " & strPageVisible & " Order by PagePriority")
If Not Query_pageList.EOF Then
Do until Query_pageList.EOF
intLeftmenuPaddingLeft = CurrentPageLevel * 4
For iIndent = 0 To intLeftmenuPaddingLeft
strSpace = strSpace & " "
Next
strPageList_Option = strPageList_Option & "<option value=""" & Query_pageList("PageID") & """"
If CInt(Query_pageList("PageID")) = CInt(intPageRefID) Then strPageList_Option = strPageList_Option & " selected=""selected"""
strPageList_Option = strPageList_Option & ">" & strSpace & Query_pageList("PageTitle") & "</option>"
strSpace = ""
Call FnBuildMovePageOption (Query_pageList("PageID"), (CurrentPageLevel + 1))
Query_pageList.MoveNext
Loop
Else
CurrentPageLevel = (CurrentPageLevel / 4)
strSpace = ""
End If
Set Query_pageList = Nothing
End Function
Funktionen virker, men problemet ligger i performance. Tabellen indeholder i skrivende stund 33 poster. Det tager ca. 6 sekunder at afvikle funktionen. Jeg tør ikke tænke på, hvad der sker, når tabellen indeholder 100 eller måske 200 poster! Problemet ligger formentlig i, at der oprettes lige så mange Select-statements som der er poster i tabellen til.
Kender nogen en alternativ måde at gøre dette på - eller måske kan se optimeringsmuligheder i den eksisterende funktion?
