Citat:
Zidar: Neam nikakvih problema da procedura poziva proceduru. Problem je kursor sam po sebi. A ako bi kursor jos pozivao proceduru u svakom pomeranju to je onda gore...
Ajd sad kad je i ala i vrana udarila po kursorima da kazemo i nesto u njihovu odbranu... :)
Kursori su losi i performanse resenja na bazi kursora su
gotovo uvek losije od resenja koja pocivaju na set pristupu. Ali nisu uvek.
Jedna od retkih prilika gde su performanse kursor resenja bolje je racunanje running totalsa ili running aggregatesa. (Izvinjavam se zbog kombinovanja srpskog i engleskog; boojim se da bi prevod na srpski izgledao jos rogobatnije). Tu je kursor bolji zbog kvadratne slozenosti subquery ili join algoritama, pa je za veci broj rekorda kursor ne samo brze resenje nego i jedino moguce. Detaljnu analizu uradio je Itzik Ben-Gan u
SQL Server Magazinu pre neku godinu.
Nazalost po kursore, a na veliko zadovoljstvo svih ljubitelja window funkcija i ovo poslednje uporiste pada u SQL Server 2012 verziji. DBEngine je doradjen, tako da se running totalsi racunaju elegantno i veoma brzo koriscenjem window funkcija.
Elem, da neko ovu "odbranu" kursora ne shvati pogresno. Ako ne racunate running total onda je upotreba kursora za resenje Vaseg problema los izbor; gotovo uvek je moguce isti problem resiti primenom set logike. SQL Server je optimizovan za tu logiku i razlike u performansama su katkad ogromne.
Pozdrav,
M.
Sad šta je tu je. A možda će da dođe i ova tvoja tetka iz Bosanske Krupe.