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

Table-Valued-Parameter

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Table Valued Parameters (TVPs) erlauben es, ganze Tabellen statt nur einzelner Werte an Prozeduren zu übergeben.
06:12

Transkript

Dann die nächste und letzte Variante an Parametern, nämlich die Möglichkeit ganze Tabellen als Parameter zu übergeben. Dafür lege ich erstmal die Datenbank an, in der Datenbank eine kleine Tabelle und zusätzlich benötige ich dann hier sogenannte Table Types. Das sind Datentypen, die nicht nur einen skalaren Wert, sondern komplette Tabellen beschreiben können. Hiermit kann ich die, wenn ich möchte, im Vorfeld löschen. Gut sie sollen natürlich nicht da sein, insofern machen diese Anweisungen gar nichts, aber hier gehen Sie über TYPE-ID, nicht über CHECK-ID, wenn Sie sicher sein wollen, dass diese beide Typen in der Datenbank existieren. NOT TYPE_ID IS NULL können Sie mit DROP TYPE löschen, danach neu anlegen. Hier zum Beispiel ein TABLE TYPE, was nur aus einer Spalte besteht. Die Definition, wenn Sie sich damit schon mal beschäftigt haben, von CREATE TABLE sieht ähnlich aus, da ist es, und auch hier in runden Klammern, genau wie bei CREATE TABLE, entsprechend der Name der Spalte-Datentyp und solche angaben wie NULL/NOT NULL. Hier unten ist wieder ein zweiter TABLE TYPE angelegt und ich kann diese TABLE TYPES dann als Parameter verwenden. Wenn ich zum Beispiel sage CREATE PROC, entsprechend der Name und ganz normal den Namen des Parameters, des TABLE TYPES. Hier der Zusatz READONLY, der muss zwingend stehen, wenn Sie READONLY weglassen, bekommen Sie eine Fehlermeldung. Innerhalb der Stored Procedure kann ich dann diese Variable da benutzen, wo ich zum Beispiel auch Tabellen oder Sichten benutzen würde und Sie sehen das hier, in dieser kleinen Unterabfrage wird genau dieser Parameter verwendet. Er gibt mir im Wesentlichen die Zahlen der [dbo].[tickets], dessen IDs ich in diesen Parameter übergeben habe. Das heißt, die Stored Procedure kann ich anlegen. Dann könnte ich das zum Beispiel nutzen durch eine DELETE-Anweisung. Ich könnte zum Beispiel sagen DELETE und lösche mir alle tickets, deren ID angebe und das schränke ich wieder mit einer Unterabfrage ein. Ich sage IDENTITYCOL entsprechend SELECT ID FROM @IDs und da mich interessiert, welche Zeile ich wirklich lösche, gebe ich hier über das OUTPUT entsprechend zurück, welche Werte in der Tat gelöscht wurden, respective IDs löschen. Tickets. Das Ganze kann ich für ein INSERT machen, dann geht es in die andere Richtung, INSERT dann mal Tabelle, die einzeln Spalten, dann entsprechend ein SELECT wieder auf das TVP, Table Valued Parameters, hier heißt es dann ticketlist, und ich bekomme hier die entsprechenden IDs, spricht die Identity Werte geliefert. Das Ganze kann ich dann ausprobieren. Ich kann diese TABLE TYPE ganz normal bei DECLARE verwenden und habe dann die Möglichkeit entsprechend in diese Variable Zeilen einzufügen. Das heißt, ich muss das immer als Block ausführen, weil sonst wäre die DECLARE-Anweisung für sich alleine und das INSERT wurde ein Fehler erzeugen, weil es die Variable nicht mehr erkennt. Wenn ich das aber zum Beispiel zusammen ausführe, dann bekomme als Rückgabe die neuen Identitätswerte in dieser Tabelle. Das heißt, ich sollte sechs Zeilen in der Tabelle eingefügt haben. Gucken wir uns mal kurz an, ob das stimmt. Es sieht gut aus, 1 bis 6. Wenn ich das Ganze nochmal ausführe, sollte ja möglich sein, bekomme ich 7 bis 12. Wenn ich nochmal ein Blick in die Tabelle werfe, bekomme ich natürlich nicht nur sechs, sondern zwölf Elemente. Damit habe ich also die Werte eingefügt und zwar in einem Rutsch. Auch nur mit einem einzigen INSERT-Statement. Also, wenn ich einen Trigger auf dieser Tabelle hätte, wäre der nur ein einziges Mal gelaufen. Dann kann ich natürlich hingehen und zum Beispiel IDs löschen, indem ich hier wieder eine Variable deklariere, die entsprechend diesmal von Typ tIDliste ist, und ich möchte die IDs 1, 2, 5 und 999 definieren. Dann rufe ich die Stored Prozedure auf, die mir die Tickets liefern sollte und ich bekomme in der Tat diese drei zurück. Dann kann ich das Ganze löschen, durchführen, das war das, was ich ursprünglich auf vor gehabt hatte. Das heißt, ich kann jetzt die Sotred Procedure nochmal aufrufen inklusive das Schema, auch wenn es nicht zwingend notwendig ist, durchaus eine gute Sache. Das heißt, erst ausgeben und dann löschen. Damit ist das das Ergebnis der ersten Stored Procedure, diejenige, die mir die Tickets liefert. Das ist das Ergebnis der zweiten Stored Procedure, die entsprechend mir angibt, welche IDs in der Tat wirklich gelöscht wurden, nämlich 1, 2 und 5, nicht aber die 999, die gab es nämlich überhaupt gar nicht. Wenn ich jetzt hier ein Refresh mache, müssten genau 1, 2 und 5 fehlen und das tut es auch in der Tat. Das heißt, ich habe damit die Möglichkeit, sehr effizient und elegant vom Code aus, entsprechend ganze Listen an die Stored Procedure auszugeben. Ich kann das auch über ADO NET machen. Da sind die Parameter dann auf der ADO NET-Seite ganze Data Tables, die nun die richtige Struktur haben müssen und die dann an den Parameter übergeben werden und ich kann damit komplett mit Listen arbeiten und muss nicht immer wieder die Stored Procedure mehrfach aufrufen, was erhörten Netzwerkverkehr natürlich bedeutet und auch bedeutet, dass denn ich Trigger habe, die jedes Mal neu aufgerufen werden. Hier habe ich halt entsprechend nur ein DELETE--Statement. Das heißt, wenn es einen Trigger gibt auf dieser Tabelle, wird er exakt auch nur ein einziges Mal aufgerufen.

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!