In SQL Server die Tabellenwertfunktion mit mehreren Anweisungen ist einer von zwei Typen von Transact-SQL-Tabellenwertfunktionen (der andere Typ ist die Inline-Tabellenwertfunktion).
Tabellenwertfunktionen (TVF) sind eine Art von benutzerdefinierten Funktionen, die ihre Ergebnisse als Tabelle zurückgeben. Sie können daher wie eine normale Tabelle abgefragt werden.
TVFs mit mehreren Anweisungen (manchmal auch als MSTVFs bezeichnet) können aus mehreren Anweisungen bestehen, deren Ergebnisse in einer Rückgabevariablen gespeichert werden. Sie fügen die Spezifikationen der Rückgabevariablen am Anfang der Funktion ein. Dies gibt die Struktur der Rückgabetabelle an. Mit anderen Worten, Sie geben an, wie viele Spalten, deren Namen, Datentypen usw.
Dies steht im Gegensatz zu Inline-TVFs (auch als ITVFs bezeichnet), die keine Rückgabevariable verwenden (die Rückgabetabelle wird durch SELECT
definiert Erklärung).
MSTVFs verwenden auch den BEGIN
/END
Syntax, was eine weitere Sache ist, die sie von ITVFs unterscheidet (ITVFs verwenden diese Syntax nicht).
Beispiel einer Tabellenwertfunktion mit mehreren Anweisungen
Hier ist ein Beispiel für ein einfaches MSTVF:
CREATE FUNCTION dbo.udf_PetsByName_MSTVF( @PetName varchar(70)) RETURNS @pets TABLE ( PetId varchar(20), PetName varchar(70) ) AS BEGIN INSERT INTO @pets SELECT CONCAT('Cat', ' ', CatId), CatName FROM dbo.Cats WHERE CatName = @PetName; INSERT INTO @pets SELECT CONCAT('Dog', ' ', DogId), DogName FROM dbo.Dogs WHERE DogName = @PetName; IF @@ROWCOUNT = 0 BEGIN INSERT INTO @pets VALUES ( '', 'There are no pets of that name.' ) END RETURN; END; GO
Hier starte ich die Funktion, indem ich die Rückgabevariable namens @pets
definiere . Es ist vom Typ Tabelle , und es werden zwei Spalten zurückgegeben.
In diesem Fall habe ich zwei SELECT
Anweisungen und ein IF
Erklärung. Die Ergebnisse von jedem werden in der Rückgabevariablen gespeichert. Dies geschieht über ein INSERT
Anweisung jedes Mal.
Funktionsoptionen
Sie können auch angeben, ob Schemabindung verwendet werden soll oder nicht (was Sie wahrscheinlich tun sollten) und ob die Funktion verschlüsselt werden soll oder nicht.
Die Schemabindung verhindert, dass nachteilige Änderungen an den zugrunde liegenden Objekten vorgenommen werden, von denen die Funktion abhängt (z. B. das Löschen einer Tabelle, das Ändern einer Spalte usw.).
Die Verschlüsselung konvertiert die Definition der Funktion in ein verschleiertes Format (um zu verhindern, dass andere sie lesen können).
Beispiele für das Hinzufügen von Schemabindung und Verschlüsselung zu einem ITVF finden Sie unter Erstellen einer mehrwertigen Tabellenwertfunktion.