In SQL Server, la funzione con valori di tabella a più istruzioni è uno dei due tipi di funzioni Transact-SQL con valori di tabella (l'altro tipo è la funzione inline con valori di tabella).
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 a più istruzioni (a volte indicati come MSTVF) possono essere costituiti da più istruzioni, i cui risultati sono archiviati in una variabile di ritorno. Includere le specifiche della variabile di ritorno nella parte superiore della funzione. Questo specifica la struttura della tabella di ritorno. In altre parole, specifichi quante colonne, i loro nomi, i tipi di dati, ecc.
Ciò è in contrasto con i TVF inline (indicati anche come ITVF), che non utilizzano una variabile di ritorno (la tabella di ritorno è definita da SELECT
dichiarazione).
Gli MSTVF usano anche BEGIN
/END
sintassi, che è un'altra cosa che li distingue dagli ITVF (gli ITVF non usano quella sintassi).
Esempio di funzione con valori di tabella a più istruzioni
Ecco un esempio di MSTVF di base:
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
Qui inizio la funzione definendo la variabile di ritorno chiamata @pets
. È di tipo tabella e restituirà due colonne.
In questo caso ho due SELECT
istruzioni e un IF
dichiarazione. I risultati di ciascuno sono memorizzati nella variabile di ritorno. Questo viene fatto tramite un INSERT
dichiarazione ogni volta.
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 multivalore con valori di tabella per esempi di aggiunta di associazione e crittografia di schemi a un ITVF.