Wählen Sie aus, wann jede Option verwendet werden soll.
SQL Server-Programmierbarkeitsobjekte bieten verschiedene Möglichkeiten zum Kapseln und Wiederverwenden von Logik in Ihrer Datenbank. Jeder Objekttyp – Ansichten, gespeicherte Prozeduren, Funktionen und Trigger – dient unterschiedlichen Zwecken und bietet einzigartige Funktionen.
Vergleichsoptionen
In der folgenden Tabelle sind die wichtigsten Funktionen und Einschränkungen jedes Objekttyps zusammengefasst:
| Fähigkeit | Ansichten | Gespeicherte Prozeduren | Funktionen | Auslöser |
|---|---|---|---|---|
| Parameter akzeptieren | Nein | Ja | Ja | Nein |
| Ändern von Daten | Begrenzt | Ja | Nein | Ja |
| Rückgabe von Ergebnissätzen | Ja | Ja | Ja (TVFs) | Nein |
Verwenden in SELECT/JOIN |
Ja | Nein | Ja | Nein |
| Transaktionssteuerung | Nein | Ja | Nein | Ja |
| Automatische Ausführung | Nein | Nein | Nein | Ja |
| Zwischenspeicherung des Ausführungsplans | Nein | Ja | Variiert | Ja |
Ansichten können Daten nur ändern, wenn sich Änderungen auf eine einzelne Basistabelle auswirken. Inline-Tabellenwertfunktionen profitieren von der Zwischenspeicherung von Plänen, da der Optimierer sie direkt in den Abfrageplan integriert. TVFs mit mehreren Anweisungen und skalare Funktionen werden als „Black Boxes“ behandelt – der Optimierer kann nicht hineinsehen, was häufig zu inkorrekten Zeilenschätzungen und suboptimalen Plänen führt.
Wählen Sie basierend auf Ihren Anforderungen
Das richtige Programmierbarkeitsobjekt hängt davon ab, was Sie erreichen müssen. Verwenden Sie dieses Entscheidungsframework, um Ihre Auswahl zu leiten:
Wählen Sie Ansichten aus, wenn Sie Folgendes benötigen:
- Vereinfachen des Zugriffs auf komplexe Verknüpfungen oder häufig gefilterte Daten
- Bereitstellen einer Sicherheitsebene durch Steuern der Spalten- und Zeilensichtbarkeit
- Erstellen einer stabilen Schnittstelle zu zugrunde liegenden Tabellen, die sich ändern können
- Präsentieren von Daten, ohne Parameter zu akzeptieren oder Werte zu ändern
Wählen Sie gespeicherte Prozeduren aus, wenn Sie Folgendes benötigen:
- Führen Sie komplexe Geschäftslogik mit mehreren Anweisungen aus
- Ändern von Daten in mehreren Tabellen in einer einzelnen Transaktion
- Eingabeparameter akzeptieren und Ausgabeparameter oder Ergebnismengen zurückgeben
- Implementieren der Fehlerbehandlung und Transaktionssteuerung
Wählen Sie Funktionen aus, wenn Sie Folgendes benötigen:
- Ausführen wiederverwendbarer Berechnungen, die Werte für die Verwendung in Abfragen zurückgeben
- Geben Sie parametrisierte Ergebnismengen (Tabellenwertfunktionen) zurück.
- Direktes Einbetten von Logik in
SELECT,WHEREoderJOINKlauseln - Sicherstellen von deterministischen Ergebnissen für die Indizierung (für bestimmte Funktionstypen)
Wählen Sie Auslöser aus, wenn Sie Folgendes benötigen:
- Automatisches Reagieren auf Datenänderungsereignisse
- Erzwingen komplexer Geschäftsregeln, die über Einschränkungen hinausgehen
- Verwaltung von Audit-Protokollen zu Datenänderungen
- Automatisches Synchronisieren verwandter Daten in Tabellen
Anwenden von Entscheidungsszenarien
Berücksichtigen Sie diese allgemeinen Szenarien und den empfohlenen Ansatz für jede:
| Scenario | Empfohlenes Objekt | Warum |
|---|---|---|
| Vereinfachen Sie eine 5-Tabellenverknüpfung, die von mehreren Berichten verwendet wird. | Sicht | Kapselt komplexität; keine Parameter erforderlich |
| Verarbeiten einer Bestellung: Überprüfen des Lagerbestands, Einfügen einer Bestellung, Aktualisieren des Lagerbestands | Gespeicherte Prozedur | Mehrere Änderungen in einer Transaktion |
| Berechnen der Versandkosten basierend auf Gewicht und Ziel | Skalarfunktion | Wiederverwendbare Berechnung in Abfragen |
| Zurückgeben aller Bestellungen für einen Kunden innerhalb eines Datumsbereichs | Tabellenwertige Funktion | Parametrisierter Ergebnissatz zur Verwendung in JOIN |
Protokollieren aller Änderungen an der Salary Spalte |
Auslöser | Automatischer, transparenter Überwachungspfad |
| Bereitstellung von schreibgeschütztem Zugriff auf Mitarbeiterdaten ohne SSN | Sicht | Sicherheitsschicht, die vertrauliche Spalten maskiert |
Vermeiden häufiger Fehler
Achten Sie bei der Auswahl von Programmierbarkeitsobjekten auf diese Fallstricke:
Verwenden von skalaren Funktionen in Klauseln in
WHEREgroßen Tabellen – Die Funktion wird für jede Zeile ausgeführt, was die Leistung beeinträchtigt. Erwägen Sie Inline-Tabellenwertfunktionen oder schreiben Sie die Logik neu.Das Erstellen von Triggern für Logik, die gespeicherte Prozeduren besser verarbeiten– Trigger werden implizit ausgeführt und können schwer zu debuggen sein. Verwenden Sie sie nur, wenn die automatische Ausführung unerlässlich ist.
Erstellen komplexer Ansichten, die andere Ansichten verschachteln – Tief geschachtelte Ansichten werden schwierig zu optimieren und zu verwalten. Halten Sie Ansichtsdefinitionen fokussiert und einfach.
Auswahl gespeicherter Prozeduren, obwohl eine Funktion besser integriert werden könnte – Wenn Sie das Ergebnis in einer
SELECT-Anweisung benötigen, bietet eine Funktion eine klarere Syntax alsEXECmit temporären Tabellen.
Mit diesem Verständnis der Stärken und Kompromisse jedes Programmierobjekts können Sie das entsprechende Tool für Ihre Datenbankentwurfs- und Implementierungsaufgaben auswählen.