Avatar billede ladyhawke Novice
06. december 2007 - 10:27 Der 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. ?
Avatar billede hrc Mester
06. december 2007 - 22:52 #1
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.
Avatar billede ladyhawke Novice
07. december 2007 - 09:43 #2
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å
Avatar billede hrc Mester
07. december 2007 - 10:16 #3
Undskyld, så ikke ordet (beklager jeg kom til at skrive det på danglish; en erhvervsskade)
Avatar billede ladyhawke Novice
07. december 2007 - 10:33 #4
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?
Avatar billede hrc Mester
07. december 2007 - 11:42 #5
Hvad med denne variant? Jeg gætter vildt og blodigt

SELECT @varname = t1.[titel]
  FROM @outputtable ot
  INNER JOIN TABLE1 t1 ON t1.[ID] = ot.[PID]
Avatar billede ladyhawke Novice
07. december 2007 - 12:05 #6
Jeg har faktisk lige fået et svar på det problem:

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)
Avatar billede ladyhawke Novice
10. december 2007 - 14:51 #7
Er nået i mål, lavede det sidste med en cursor.

hrc>> læg et svar, så deler vi i porten, det du svarede på var jo rigtigt :o)
Avatar billede hrc Mester
11. december 2007 - 12:19 #8
10-4. God jul.
Avatar billede ladyhawke Novice
11. december 2007 - 12:40 #9
I lige måde
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester