Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

SQL Server 2016: Triggers, Stored Procedures und Funktionen

Tabellenwertfunktionen

Testen Sie unsere 2019 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Erfahren Sie, worin sich Tabellenwertfunktionen von Skalarfunktionen unterscheiden und was es beim Umgang mit Tabellenwertfunktionen Wichtiges zu beachten gilt.
06:54

Transkript

Statt Skalarwertfunkionen können Sie auch Tabellenwertfunktionen entwickeln. Diese liefern dann nicht einen Wert zurück, sondern komplette Tabellen. Das bedeutet, Sie haben hier die Möglichkeit diese Funktion dort einzusetzen, wo auch Schichten und Tabellen ihren Einsatz finden. Wenn man das ein bisschen abstrakt sehen möchte, könnte man quasi auf die Idee kommen zu sagen, Tabellenwertfunktionen sind quasi Schichten oder Views, die Parameter akzeptieren, weil das ist natürlich eine Option, die nach wie vor im Raum steht, Tabellenwertfunktionen können Parameter haben und ich habe damit die Möglichkeit wirklich Datenmengen zu liefern an den Aufrufer und zwar abhängig von den übergebenen Parametern. Aber das Wichtigste zuerst einmal in Kürze. Auch Tabellenwertfunktionen dürfen keine Änderungen an Daten oder Objekten durchführen, da ist reines Lesen. Es ist nicht möglich einer Art Fehlerbehandlung reinzubauen, weil das einfach dem Aufrufer obliegt. Dann gibt es Tabellenwertfunktionen in zwei Varianten: zwar einmal eine Inline- und eine Multistatement-Variante. Ich werde immer beides zeigen bei den folgenden Beispielen, zunächst einmal immer die Inline- dann die Multistatement-Variante. In der Regel kann man alles mit beide machen, die große Unterschied ist einfach der, das die Inline-Version lediglich aus einem SELECT-Statement besteht, das kann natürlich auch etwas komplexer sein, während die Multistatement- Variante es wirklich erlaubt komplexere Programmierungen, zumindest sofern TSQL komplexere Programmierungen erlaubt, entsprechend durchzuführen und das Ergebnis dann zum Schluss an dem Aufrufer zurückzuliefern. In beiden Fällen ist es so, dass das Ergebnis natürlich definiert sein muss, auch da einen Parallele zum Skalarwertfunktionen, wo ich auch angeben muss, was für einen Datentyp genau zurückgeliefert werden soll. Dann können Tabellenwertfunktionen verschlüsselt werden. Das ist so ähnlich wie auch bei Views, auch bei Stored Proceduren und auch bei Skalarwertfunktionen. Tabellenwertfunktionen können auch den UserContext wechseln mit EXECUTE AS. Zumindest geht das mit der Multistatement-Variante. Das ist ein Unterschied zwischen den beiden Varianten. Die Inline-Version unterstützt kein EXECUTE AS. Tabellenwertfunktionen können SCHEMABINDING verwenden um damit sicherzustellen, dass die Objekte, die sie verwenden, nicht modifiziert werden, sodass sie beim nächsten Aufruf einen Fehler erzeugen. Wie das Ganze funktioniert, also wie Tabellenwertfunktionen\ allgemein angelegt werden sehen Sie jetzt in folgenden beiden Beispielen. So zunächst also mal die Inline-Version. Dafür lege ich erstmal eine Datenbank an. Dass er abgeschlossen ist, sehen Sie CREATE FUNCTION. So weit so gut, dann können die Parameter kommen in runden Klammern und hier als Rückgabetyp quasi schlicht TABLE, dann AS RETURN auf wieder runden Klammern und hier kein Anweisungsblock, sondern lediglich ein SELECT-Statement. Der SQL-Server analysiert in dem SELECT-Statement entsprechend die Spalten, die zurückgeliefert werden und weiß damit genau, welche Rückgabe vorliegt. Sie können also hier auf keinen Fall in irgendeiner Form quasi erst die Rückgabe zu Ausführung bestimmen, das muss wirklich auch bei der Multistatement-Variante, die ich Ihnen gleich zeige, wirklich zur Entwurfzeit geschehen. Das heißt, ich kann diese Funktion so anlegen. Ich kann mit ALTER FUNCTION entsprechend bestehende Funktionen modifizieren. Mit DROP FUNCTION kann ich diese Funktion auch löschen, wenn ich möchte. Hier kann ich die OBJECT ID-Funktion nehmen, wenn es keinen Fehler gibt für den Fall, dass es die Funktion gar nicht gibt. Hier ist der Typ IF, ich vermute mal, steht für Inline Function, und wenn ich das ausführe, dann ist die Funktion wieder weg. Ich will sie aber zumindest einmal kurz gesehen haben und das ginge hier in dem Datenbank Programmability, dann suche ich mir die Funktion raus, Table-valued Functions, und ich kann dann hier entsprechend zum Beispiel mir die Syntax abrufen, wenn ich möchte, und kann hier die Parameter einsehen. So! Dann lasse ich es einmal laufen. Dann sollte nach einem Refresh hier, nicht mehr zu sehen sein. Die Multistatement-Variante sieht ein bisschen anders aus. Zunächst setze ich aber die Datenbank zurück. Dann kann ich die Funktion anlegen, deswegen sage CREATE FUNCTION, Schema und Name der Funktion in runden Klammern, bei Bedarf Parameter, dann RETURNS als Schlüsselwort, dann der Name einer Rückgabe-Variable. Der Trick ist hier, dass diese Variable ein Tabellenwerttyp ist und im Zuge meiner Funktion befüllt wird. Was immer da zum Schluss drinstehen mag, wenn es entsprechend ein RETURN-Statement hat, wird an den Aufrufer zurückgeliefert. Das heißt, hier kann ich dann genau auch definieren, welche Spalten ich brauche, kann den Spaltennamen und Datentypen geben und im Ausführungsblock, hier ist wieder ein BEGIN und ein END, kann ich dann in diese Variable einfügen, als würde ich ihn eine Tabelle einfügen. Wenn ich das Statement so definiere, würde es mir genau eine Zeile mit einer Spalte zurückliefern, wo genau der Wert 0 drinsteht. Um die Tabelle zu ändern kann ich sagen ALTER FUNCTION und die Definition beispielsweise modifizieren. Ich könnte sagen, ich will dann mehr als nur eine Zeile haben, nämlich zwei. Ich kann die Funktion generell auch löschen natürlich, wenn ich möchte, ich kann sagen DROP FUNCTION, dann entsprechend den Namen der Funktion und hier habe ich als Typ TF, als Typ für die OBJECT_ID-Funktion um erst zu prüfen, ob es das Element in der Tat gibt, und wenn ich möchte, kann ich ab SQL-Server 2016 dann hingehen und DROP IF EXISTS benutzen. Aber bevor ich das jetzt hier lösche, möchte ich auch der Funktion einmal kurz die Chance geben Hallo zu sagen. Ich gehe unter Functions Table-valued Function und kann dann auch hier sehen, was in der Funktion definiert ist und kann mir auch hier die Parameter anschauen. Dann lasse ich den Code laufen, mache hier nur Refresh und dann sollte die Funktion in der Tat auch verschwunden sein.

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!