In SQL Server, la funzione con valori di tabella inline è uno dei due tipi di funzioni Transact-SQL con valori di tabella (l'altro tipo è la funzione con valori di tabella a più istruzioni).
Le funzioni con valori di tabella (TVF) sono un tipo di funzione definita dall'utente che restituisce i risultati sotto forma di tabella. Possono quindi essere interrogati proprio come un normale tavolo.
I TVF in linea (a volte indicati come ITVF) non hanno variabili di ritorno associate. Il valore di ritorno è definito tramite un singolo SELECT dichiarazione. Questa istruzione definisce la struttura della tabella di ritorno. Ciò è in contrasto con le TVF con più istruzioni (chiamate anche MSTVF), che richiedono una variabile di ritorno.
Inoltre, gli ITVF non utilizzano BEGIN /END sintassi, che è un'altra cosa che li distingue dai MSTVF.
I TVF in linea sono spesso considerati avere prestazioni migliori rispetto ai TVF multi-istruzione, anche se questo dipenderà anche da ciò che stai cercando di fare nella funzione.
Esempio di funzione inline con valori di tabella
Ecco un esempio di ITVF di base:
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
Fondamentalmente consiste in un SELECT istruzione racchiusa in un altro codice. Per renderlo specificamente un inline TVF, ho avviato la funzione con RETURNS TABLE , seguito da vicino da RETURN e termina con un SELECT frase tra parentesi.
Dichiarazioni multiple
Sebbene le funzioni inline con valori di tabella non siano progettate per più SELECT (ecco a cosa servono gli MSTVF), è possibile utilizzare il UNION operatore per combinare il set di risultati di più istruzioni.
Esempio:
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
Opzioni funzione
Puoi anche specificare cose come, se usare o meno il binding dello schema (probabilmente dovresti) e se crittografare o meno la funzione.
Il binding dello schema impedirà che vengano apportate modifiche negative agli oggetti sottostanti da cui dipende la funzione (come l'eliminazione di una tabella, la modifica di una colonna, ecc.).
La crittografia convertirà la definizione della funzione in un formato offuscato (per impedire ad altri di leggerla).
Consulta Creare una funzione inline con valori di tabella per esempi di aggiunta di associazione di schemi e crittografia a un ITVF.