In SQL Server die inline-Tabellenwertfunktion ist einer von zwei Typen von Transact-SQL-Tabellenwertfunktionen (der andere Typ ist die Tabellenwertfunktion mit mehreren Anweisungen).
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.
Inline-TVFs (manchmal auch als ITVFs bezeichnet) haben keine zugeordneten Rückgabevariablen. Der Rückgabewert wird durch ein einzelnes SELECT
definiert Erklärung. Diese Anweisung definiert die Struktur der Rückgabetabelle. Dies steht im Gegensatz zu TVFs mit mehreren Anweisungen (auch als MSTVFs bezeichnet), die eine Rückgabevariable erfordern.
ITVFs verwenden auch nicht den BEGIN
/END
Syntax, was ein weiterer Unterschied zu MSTVFs ist.
Inline-TVFs werden oft als leistungsstärker angesehen als TVFs mit mehreren Anweisungen, obwohl dies auch davon abhängt, was Sie in der Funktion tun möchten.
Beispiel einer Inline-Tabellenwertfunktion
Hier ist ein Beispiel für ein einfaches ITVF:
CREATE FUNCTION dbo.ufn_AlbumsByArtist(@ArtistId int) RETURNS TABLE AS RETURN ( SELECT al.ArtistId, al.AlbumName, g.Genre FROM dbo.Albums al INNER JOIN dbo.Artists ar ON al.ArtistId = ar.ArtistId INNER JOIN Genres g ON al.GenreId = g.GenreId WHERE al.ArtistId = @ArtistId ); GO
Es besteht im Wesentlichen aus einem SELECT
Anweisung, die in anderen Code eingeschlossen ist. Um es speziell zu einem inline zu machen TVF, ich habe die Funktion mit RETURNS TABLE
gestartet , dicht gefolgt von RETURN
, und endet mit einem SELECT
Anweisung in Klammern.
Mehrere Anweisungen
Obwohl Inline-Tabellenwertfunktionen nicht für mehrere SELECT
ausgelegt sind -Anweisungen (dafür sind MSTVFs da), ist es möglich, die UNION
zu verwenden Operator, um die Ergebnismenge mehrerer Anweisungen zu kombinieren.
Beispiel:
CREATE FUNCTION [dbo].[udf_PetsByName_ITVF]( @PetName varchar(70)) RETURNS TABLE AS RETURN ( SELECT CONCAT('Cat', ' ', CatId) AS PetId, CatName FROM dbo.Cats WHERE CatName = @PetName UNION ALL SELECT CONCAT('Dog', ' ', DogId) AS PetId, DogName FROM dbo.Dogs WHERE DogName = @PetName ); GO
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 Inline-Tabellenwertfunktion.