Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Che cos'è una funzione con valori di tabella in SQL Server?

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 successivo SELECT 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