Citat:
Jos bolja je nova, "Inside Microsoft SQL Server 2008 T-SQL Querying"
Ne sumnjam, nisam znao da je izasla knjiga. Itzik ne ponavlja uglavnom stvari iz knjige u knjigu, pa ne bih bio iznendajen da knjiga za 2008 u stvari samo produzava gde je knjiga 2005 stala.Tako je bar bilo izmedju 2000 i 2005. U svakom slucaju, hvala na informaciji.
Zakacio sam dve skripte. Prva, Hijerarhija.sql kreira tabelu s kojom se kasnije radi. Tabela sadrzi zaposlene u firmi, gde postoji relacija na samu sebe. Svaki zaposleni (employee) ima nadredjenog managera (koji je i sam employee i ima svog menaqdzera). Svi su u istoj tabeli, i postoji FK sa tabele na samu sebe, uglavnom ono sto svi manje vise znamo. Tu se za prosecnog coveka znanje o hijerarhijama zavrsava - kako ih pamtimo u tabeli.
Itzik u knjizi objasnjava kako se pisu kveriji koji odgovaraju na pitanja o hijerarhijama. To se posytize pomocu funkcija. Lepa stvar je sto cak i ako se ne razume sve (a ako nemas knjigu, tesko ces razumeti), funkcije mogu da se iskoriste i preprave da sluze nasim konkretnim prilikama. Funkcije i SQL izrazi koji ih ilustruju su prilicno lepo objasnjeni komentarima, pa s enadam da ce ti pomoci.
U svakom slucaju, ja imam knjigu, pa ako zapnes, pitaj, a ja cu da pogledam u knjigu
Kod mene na production serveru rde dve funkcije koje sam prepisao od Itzika, kad ih nisam ni malo razumeo. Kasnije sam uspeo da prevedem nesto i u Access, znaci nesto sam kao razumeo. pomioci cemo koliko mozemo.
Prva skripta, Hijerarhija.sql , ima tri funkcije:
1) dbo.fn_subordinates1 - nija bas ono sto ti treba, ali je jako vazna za razumevanje pretrazivanja hijerarhije. Funkcija pokazuje svu decu izabranog roditelja.
2) dbo.fn_managers - inverzan zadatak, zadato je dete, pokazuje sve pretke
3) dbo.fn_subordinates3 - ono sto tebi treba. funkcija pokazuje svu decu izbranog roditelja u formatu 'jedn roditelj jedan red, deca kao comma delimited string u istom redu'
Za sve funkcije dati su i kveriji koji ilustruju sta se desava. Funkcije rade u verzijai 2000 i novijim. Uz svaku funkciju dato je i resenje sa rekurzivnim CTE. Ako imas iskustva sa CTE i rekurzijama, mozes da ih pretvoris u funkcije, krace su nego klasicne verzije. Klasicne verzije su medjutim lakse za razumevanje.
Druga skripta, Hijerarhija_Sorting.sql, sadrzi funkciju koja se bavi sortiranjem izlaza. Funkcija dbo.fn_subordinates1 vraca svu decu, ali se ne garantuje redosled medju decom. Na primer, ako roditelj broj 1 ima decu ciji su brojevi 2,3,5 deca se mogu pojaviti na izlazu u redosledu 2,2,5 ili bilo kom (i pojavljuju se) i nemoguce ih je sortirati. Ako se zeli sortirani izlaz, onda Itzik daje stored proceduru umesto funkcije, koja vraca sortirani set. Zanimljivo, a moze biti i korisno.
Srecan rad