Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

MS SQL Server - Wann ist ein CURSOR gut?

Normalerweise sollten sie vermieden werden, aber die Funktion ist aus einem bestimmten Grund da und es gibt Zeiten, in denen sie verwendet werden können. Ich würde sagen, dass mehr als 90 % der Cursor, die ich gesehen habe, nicht benötigt werden. Wenn Sie sie für CRUD-Operationen verwenden, kann dies fast immer satzbasiert wiederholt werden. Ich habe oft Leute gesehen, die dafür Cursor verwenden, weil sie nicht wissen, wie man Joins in einem Update oder Delete verwendet, oder dass sie eine Select-Anweisung anstelle einer Werteklausel in einer Einfügung verwenden können. Eine weitere unnötige Verwendung, wenn Leute denken, dass sie sie für eine etwas komplexere Verarbeitung benötigen, die eigentlich leicht mit einer Case-Anweisung gehandhabt werden könnte.

Cursor sind manchmal schneller, um so etwas wie eine laufende Summe zu berechnen.

Cursor sind auch praktisch für die mehrfache Ausführung einer gespeicherten Prozedur, die so eingerichtet ist, dass sie jeweils nur einen Eingabewert verarbeitet. Ich verwende diese Funktion nicht, um vom Benutzer gespeicherte Prozesse auszuführen (es sei denn, ich weiß, dass ich auf eine sehr kleine Menge von Daten treffen werde), aber sie ist sehr praktisch für Datenbankadministratoren, wenn sie Systemprozesse für mehrere Tabellen ausführen müssen.

Wenn Sie E-Mails in SQL erstellen (nicht der beste Ort dafür, aber in einigen Systemen tun sie es dort) und nicht möchten, dass die gesamte Zielgruppe der E-Mail die anderen Personen auf der Liste sieht, oder Sie jede personalisieren möchten E-Mail mit Informationen über den Adressaten, Cursor sind der Weg zu gehen.

Cursor oder Schleifen können auch verwendet werden, um Stapel von Datensätzen zu verarbeiten, wenn das gesamte satzbasierte Einfügen/Aktualisieren/Löschen zu lange dauert und die Tabellen blockiert. Dies ist eine Art Hybrid zwischen den Cursorn und der satzbasierten Lösung und ist oft die beste Lösung für große Änderungen an Produktionssystemen.