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.