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.