Hej! Ska du använda en rekursiv procedur så är temporära tabeller är ett av de alternativ du har. Annars kan du göra en funktion som kör en loop och fyller en tabellvariabel som returneras. Kolla mitt inlägg för ett tag sedan: [Någon som har en effektivare lösning än den här?]SQL och rekursion
Jag har en tabell som heter DocumentGroup. Den har följande kolumner:
GroupID
ParentGroupID
GroupName
Sen har jag en annan tabell som heter Document som består av följande kolumner:
DocumentID
GroupID
Title
där GroupID är nyckeln i DocumentGroup tabellen.
Jag vill skriva en rekursiv SP som givet en @groupID, går igenom Document tabellen och hämtar:
* alla dokument som har GroupID = @groupID och
* alla dokument som har GroupID = @groupID's barn.
Kan nån hjälpa mig? Jag vill inte använda mig av temporär tabeller. Går det att undvika det?
Mvh,
NazSv: SQL och rekursion
Inget av dessa alternativ är dock särskilt bra, bättre att använda någon av de tekniker som hittats på för att hantera hierarkier i SQL utan rekursion eller iterering, utan bara med vanlig mängdbaserad SQL. SQL är ju trots allt baserat på relationsmodellen och därför bör du inte arbeta iterativt med det. SQL Server har dessutom en gräns på 32 nivåers rekursion (just för att rekursion inte är särskilt bra för prestandan och man inte ska kunna ta död på maskinen genom en dum rekursion). Googla lite efter Enumerated Paths (Itzik Ben-Gan), Access Paths (Steve Kass) eller Nested Sets (Joe Celko).Sv: SQL och rekursion
Där finns en lösning på ditt problem som med bra index satta inte tar alltför lång tid att utföra.