06. december 2007 - 10:27Der er
7 kommentarer og 2 løsninger
Hvordan finder jeg "path" via en function i MSSQL 2000?
Jeg har to tabeller b_items (indeholder alle elementer til et tree view) b_folders (indeholder alle mapper i treeview'et)
Jeg har brug for en funktion der tager item_id_del1 og item_id_del2, finder alle de elementer der findes i b_items, som passer med det. (det kan jeg godt)
Så skal jeg for alle rækker i den resulterende tabel, finde stien i treeviewet. Altså først slå parent_folder_id i b_folders (id'et findes i resultattabellen). Dette lægges i en streng (en kolonne i resultattabellen)
Dernæst: hvis denne folder (baseret på parent_folder_id) indeholder et parentid != null, så skal jeg tilføje dennes streng til kolonnen osv.
Det er jo egentlig perfekt til rekusivitet, men jeg mener ikke man kan lave det direkte i SQL Server 2000. Cursors vil jeg helst undgå, af hensyn til perfomance... Kan man gøre noget med en while løkke e.l. ?
Mon ikke du skal over og lege med StoredProcedures eller Functions? Kan i alt fald ikke tro at rekursivitet i MSSQL er hurtigt. Siden du kører 2000 kan du heller ikke programmere SSIS pakker i .NET (du kan vist gøre det i Ansi C).
Det skulle nu ikke undre mig, om det var hurtigere at lave to simple selects og efterbehandle på klientsiden.
det er jeg klar over... jeg skrev at jeg skulle bruge en funktion (function på udenbysk)... Jeg er ved at have styr på det meste af den, tror jeg... men måske fandtes der en alment kendt måde at gøre det på
det er ok, nu hedder det jo også de nævnte gloser på udenlandsk/originalsprog...
Jeg har næsten en funktion/function på plads, jeg har fundet første del af stien, men jeg bokser lidt med at opdatere min tabel, jeg skal bruge en variabel som bliver sat til en værdi fra min resultattabel og det kan jeg ikke få til at virke, i princippet noget a la:
SELECT @varname = TABLE1.titel FROM @outputtable INNER JOIN TABLE1 ON TABLE1.[ID] = @outputtable.PID Fejlen er "Must deklare @outputtable...", problemet er bare at den allerede er erklæret i starten af min function. Så spørgsmålet er, hvordan får jeg ellers fat i den ønskede værdi?
SELECT @varname = TABLE1.titel FROM @outputtable INNER JOIN TABLE1 ON TABLE1.[ID] = @outputtable.PID Skal laves om til: SELECT @varname = TABLE1.titel FROM @outputtable AS outputtable INNER JOIN TABLE1 ON TABLE1.[ID] = outputtable.PID
altså som du angiver skal der bruges alias...
Er ved at være i mål, mangler lige at iterere igennem min tabel, så tror jeg den er der :o)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.