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.