In SQL Server, una funzione con valori di tabella (TVF) è una funzione definita dall'utente che restituisce una tabella. Ciò è in contrasto con una funzione scalare, che restituisce un singolo valore.
Puoi richiamare una funzione con valori di tabella nello stesso modo in cui puoi interrogare una tabella. Ad esempio, puoi usarlo in un SELECT
dichiarazione. In alcuni casi, le funzioni con valori di tabella possono essere utilizzate anche per aggiornare, eliminare e inserire dati.
Tipi di funzioni con valori di tabella
Quando si crea una funzione con valori di tabella, è possibile scegliere di creare una funzione con valori di tabella Transact-SQL o una funzione con valori di tabella CLR (Common Language Runtime).
Funzioni con valori di tabella di Transact-SQL
I TVF Transact-SQL possono essere uno dei seguenti:
- Funzione con valori di tabella in linea (ITVF)
- Quando crei un ITVF, inizi la definizione della funzione con
RETURNS TABLE
e il successivoSELECT
definisce la struttura della tabella di ritorno. - Funzione con valori di tabella a più istruzioni (MSTVF)
- Una funzione con valori di tabella con più istruzioni può contenere più istruzioni, i cui risultati vengono salvati in una variabile dichiarata all'inizio della funzione. Quando si esegue questa operazione, si specifica esplicitamente la struttura della tabella di ritorno.
Funzioni con valori di tabella CLR
Dal punto di vista CLR, la sintassi è simile a T-SQL ITVF, ma leggermente diversa. Si specifica esplicitamente la struttura della tabella di ritorno, ma non si dichiara una variabile di ritorno.
Le funzioni con valori di tabella CLR vengono implementate come metodi su una classe in un assembly di Microsoft .NET Framework.
Per una panoramica più dettagliata dei TVF CLR, vedere la documentazione di Microsoft per le funzioni con valori di tabella CLR.
Esempio 1 – Funzione inline con valori di tabella
Ecco un esempio del codice T-SQL utilizzato per creare una funzione inline con valori di tabella.
CREATE FUNCTION dbo.udf_CatsByName_ITVF( @CatName varchar(70) ) RETURNS TABLE AS RETURN ( SELECT CatId, CatName, Phone FROM dbo.Cats WHERE CatName = @CatName ); GO
Possiamo dire che questa è una funzione inline con valori di tabella, perché non specifica la struttura della tabella di ritorno. Indica semplicemente RETURNS TABLE
, quindi si basa su SELECT
istruzione per determinare la struttura della tabella di ritorno.
In questo caso, la funzione richiede che il nome del gatto venga passato come argomento.
Vedere Creare una funzione inline con valori di tabella per esempi di aggiunta di opzioni come l'associazione di schemi e la crittografia.
L'associazione dello schema è in genere una buona idea, in quanto impedisce che vengano apportate modifiche negative agli oggetti sottostanti a cui fa riferimento la funzione.
Esempio 2 – Funzione con valori di tabella a più istruzioni
Ecco come scriveremmo la funzione se volessimo che fosse una funzione con valori di tabella a più istruzioni.
CREATE FUNCTION udf_CatsByName_MSTVF( @CatName varchar(70) ) RETURNS @cats TABLE ( CatId int, CatName varchar(70), Phone varchar(10) ) AS BEGIN INSERT INTO @cats SELECT CatId, CatName, Phone FROM dbo.Cats WHERE CatName = @CatName; RETURN; END; GO
In questo caso, utilizziamo una variabile di tipo tabella chiamato @cats
e specifichiamo esplicitamente la struttura della tabella di ritorno. I risultati della query vengono archiviati in quella variabile, che viene quindi restituita quando viene richiamata la funzione.
Questo esempio non rende giustizia a MSTVF, perché includo solo una singola affermazione. Il punto principale di MSTVF è che puoi includere più istruzioni e puoi aggiungere l'output di tali istruzioni alla variabile di ritorno.
Consulta Creare una funzione con valori di tabella con più istruzioni per un esempio di utilizzo di più istruzioni, nonché esempi di aggiunta di opzioni come associazione di schemi e crittografia.
Esempio 3:selezionare i dati dalle nostre funzioni con valori di tabella
Quindi ora che abbiamo creato le nostre funzioni, possiamo invocarle entrambe usando un SELECT
dichiarazione.
SELECT * FROM udf_CatsByName_ITVF('Tom'); SELECT * FROM udf_CatsByName_MSTVF('Tom');
Risultato:
+---------+-----------+------------+ | CatId | CatName | Phone | |---------+-----------+------------| | 3 | Tom | 7871237652 | +---------+-----------+------------+ (1 row affected) +---------+-----------+------------+ | CatId | CatName | Phone | |---------+-----------+------------| | 3 | Tom | 7871237652 | +---------+-----------+------------+ (1 row affected)
Sia l'ITVF che l'MSTVF sono stati richiamati utilizzando la stessa sintassi ed entrambi hanno restituito lo stesso risultato.
Richiamo di funzioni con valori di tabella
Le funzioni con valori di tabella possono essere richiamate laddove le espressioni di tabella sono consentite nel FROM
clausola di SELECT
, INSERT
, UPDATE
o DELETE
dichiarazioni.
Ciò significa che puoi selezionare dati, inserire dati, aggiornare dati e persino eliminare dati tramite una funzione con valori di tabella.
Ecco gli articoli che li dimostrano:
- Seleziona i dati tramite una funzione con valori di tabella
- Aggiorna i dati tramite una funzione con valori di tabella
- Inserisci dati tramite una funzione con valori di tabella
- Elimina i dati tramite una funzione con valori di tabella