Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

SQL Server 2016: Triggers, Stored Procedures und Funktionen

INSTEAD OF ermöglicht funktionale Änderung an der DML-Anweisung

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
INSTEAD OF-Trigger ermöglichen es, die Funktionsweise von INSERT-, DELETE- und UPDATE-Anweisungen zu übernehmen und so z.B. virtuelles Löschen zu realisieren.
05:13

Transkript

Mit INSTEAD OF-Triggern haben Sie die Möglichkeit, Trigger anstatt von DML- Anweisungen ausführen zu lassen. Damit habe ich die Möglichkeit, INSERT, DELETE und UPDATE in irgendeiner Form so anzupassen, wie ich mir das vorstelle. Das heißt, ich kann einen funktionalen Ersatz schaffen für diese DML-Statement. Damit kann ich zum Beispiel ein Datensatz nicht wirklich zu löschen, wenn ein DELETE-Statement ausgeführt wird, sondern in einer zweiten Tabelle zu archivieren. Oder ich kann ein virtuelles Löschen ermöglichen, was zum Beispiel ebenfalls beim Löschen dazu führt, dass die Zeile nicht entfernt wird, sondern schlicht als gelöscht markiert wird. Ich habe auch die Möglichkeit zum Beispiel Änderungen an Views mit JOINTS durchzuführen und zwar in korrekte Art und Weise, sodass die Änderungen wirklich sich auf die darunterliegenden Tabellen richtig auswirken. Die Anwendungsgebiete für INSTEAD OF-Trigger sind durchaus relativ umfangreich. Ich zeige Ihnen das jetzt mal als Beispiel für ein virtuelles Löschen. Dafür habe ich dieses Skript geladen. Zunächst einmal wieder eine Datenbank anlegen und dann eine Tabelle. Und auf dieser Tabelle lege ich einen INSTEAD OF DELETE-Trigger an. Ansonsten ist die Syntax die gleiche: CREATE TRIGGER, Name des Triggers, ON, dann der Name der Tabelle, INSTEAD OF DELETE und hier gehe ich dann hin in diesem Trigger und setze einer UPDATE- Anweisung auf die Tabelle auf mit [IsDeleted] = 1 für die Fälle, wo sich der ID in der DELETED-Tabelle befindet, genau gesagt natürlich in der ID-Spalte. So! Dann kann ich einige Zeilen einfügen und wenn ich mir zum Beispiel die Daten anschaue, dann sehe ich mal das 6 Zeilen sind, es ist nicht schlimm. Dann kann ich zwei Zeilen löschen. Ich bekomme in der Tat dann auch genau dieses Statement: Two rows affected. Das heißt, ich könnte notfalls mir überlegen, ob ich vielleicht ein SET NOCOUNT hier oben noch reinsetze. Damit hätte ich die Möglichkeit auch nur eine Nachricht zu sehen. Ich mache das mal kurz. Wenn ich jetzt hingehe und nochmal lösche, habe ich hier auch in der Tat nur dieses Two rows affected einmal stehen. Wenn ich in die Tabelle schaue, dann sehe ich, dass die Zeilen noch vorhanden sind und lediglich als IsDeleted gekennzeichnet sind. In einem zweiten Beispiel, zeige ich Ihnen, wie das mit einem View aussieht und dann wird das Ganze relativ rund. Also ich lege zunächst einmal eine Datenbank an, lege eine Tabelle an, ein View auf dieser Tabelle und hier filtere ich einfach IsDeleted = 0 raus, das heißt, ich bekomme nur die Datensätze auch wirklich zu sehen, die nicht virtuell gelöscht wurden. Ich kann jetzt wieder ein INSTEAD OF-Trigger anlegen, allerdings nicht auf der Tabelle, sondern auf dem View. Damit habe ich den Trigger angelegt, ich kann wieder ein paar Zeilen Testzwecken einfügen und ich kann einmal gucken, was in der Originaltabelle sind sechs Zeilen überraschenderweise. Der View liefert mir ebenfalls sechs Zeilen, zumindest sollte er das. Dann kann ich durch den View beispielsweise Daten löschen, zwei Stück. Wenn ich dann auf die Originaltabelle gucke, dann habe ich genau das gleiche Bild, was ich auch gerade schon mal im ersten Demo hatte. Die beiden Zeilen sind als gelöscht markiert und wenn ich den View benutze, habe ich natürlich genau die Situation, dass ich nur vier Zeilen sehe, die anderen beiden sind hier rausgefiltert. Damit wird das Ganze relativ rund. Das heißt, ich kann den Zugriff statt auf der Tabelle auf dem View realisieren. Ich kann mit dem View arbeiten, auch Updates machen, da ich jetzt hier keine JOINS oder ähnlichen komplexen Konstrukte habe, werden die UPDATE und die INSERT- Statements auch richtig ausgeführt. Damit habe ich quasi die Möglichkeit zu löschen, ohne dass mir wirklich was abhanden kommt in der Datenbank, das wird lediglich als gelöscht markiert. Wenn ich das ein bisschen weiter treibe, kann ich zum Beispiel hingehen und noch zwei Zeilen löschen. Es bleiben auch in der Tat nur noch zwei Zeilen übrig. Wenn ich nochmal lösche, dann habe ich in der Tat keine Zeile mehr, die mir den View anzeigt, weil alle Zeilen entsprechend als IsDeleted markiert sind. Damit habe ich ohne Weiteres die Möglichkeit, ein UNDELETE oder Ähnliches zu realisieren und kann damit quasi etwas, ich würde fast sagen, sorglos löschen.

SQL Server 2016: Triggers, Stored Procedures und Funktionen

Nutzen Sie in SQL Server Trigger, gespeicherte Prozeduren, Late Binding, Fehlerbehandlung sowie Scalar- und Tabellenwertfunktionen.

3 Std. 12 min (44 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:08.08.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!