Kursory w MS SQL

0

Hej, mam pytanie o kursory w MS SQL, co to jest, do czego można ich użyć i czy warto?

1

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-d[...]zego-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

0

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...

0

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.

1

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
0
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 ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0