Hej, mam pytanie o kursory w MS SQL, co to jest, do czego można ich użyć i czy warto?
- Rejestracja:ponad 10 lat
- Ostatnio:około 2 lata
- Postów:105
Jak nie trzeba, to lepiej ich nie używać, chociażby ze względów wydajnościowych. Kursory są powolne. Poza tym działają w oparciu o logikę trochę niezgodną z ideą zbiorów i baz relacyjnych. Działają na wierszach, a logika baz relacyjnych jest oparta na działaniu na kolumnach.
Tu jest zbiór linków o kursorach, z pewnością pomogą Ci w ich zrozumieniu:
http://grodzicki.eu/kursory-dlaczego-tak-je-lubimy-i-dlaczego-ich-lepiej-nie-uzywajmy/
http://grodzicki.eu/abc-kursor-ow-w-sql-server/
https://edux.pjwstk.edu.pl/mat/118/lec/w13.html
http://dev.cdur.pl/Artykuly/Kursory-w-SQL-Server
- Rejestracja:ponad 22 lata
- Ostatnio:około 13 godzin
- Postów:3874
Warto znać, choćby po to żeby wiedzieć co się dzieje, jak dostaniesz kod z użytym kursorem.
Moje podejście jest takie, że za użycie kursora obcinam ręce ;) Nie spotkałem się jeszcze z przypadkiem aby użycie kursora było podyktowane faktyczna niemożliwością rozwiązania problemu bez niego...
- Rejestracja:ponad 19 lat
- Ostatnio:3 dni
- Postów:858
Tylko czasem użycie kursora upraszcza i ułatwia czytanie kodu. Jeżeli w danym miejscu wydajność nie jest kluczowa albo mamy mało danych to lepiej użyć kursora niż jakieś karkołomne zapytanie. Po jakimś czasie przynajmniej można szybko dojść o co chodzi a nie zastanawiać się co ten dziwny kod robi.

- Rejestracja:ponad 18 lat
- Ostatnio:około 8 lat
- Lokalizacja:Poznań
- Postów:295
przeciez kazdy kursor idzie zaminic na analogiczne rozwiazanie z while np
select
Id = identity(int, 1, 1),
*
into
#data
from
Tabela
declare @Index1 int;
declare @Index2 int;
select @index1 = min(Id), @Index2 = max(Id) from #data
while @Index1 <= @Index2
begin
// kod z triggera
@Index1 += 1;
end
- Rejestracja:ponad 22 lata
- Ostatnio:około 13 godzin
- Postów:3874
crowa napisał(a):
przeciez kazdy kursor idzie zaminic na analogiczne rozwiazanie z while np
Pytanie tylko po co zamieniać? I w ogóle po co używać kursorów?
Rozumiem jeszcze pętle do wykonywania operacji nie związanymi bezpośrednio z operacjami na danych np. procedury do backupowania, reindeksacji czy inny szeroko rozumiany maintance...
Ale znajdź mi jeden przykład, że czegoś nie da się zrobić na danych bez kursora... Mi się nie udało. Podejmę rękawice, taki challange ;)
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.
Merano