SQL Server viene fornito con una raccolta di funzioni predefinite che consentono di eseguire una serie di operazioni. Ogni funzione incorporata ha uno scopo specifico e non può essere modificata. Se una funzione serve al tuo scopo, puoi andare avanti e usarla.
Ma cosa succede se non riesci a trovare una funzione che serva al tuo scopo?
Quindi è il momento di scrivere la tua funzione definita dall'utente.
Cos'è una funzione definita dall'utente?
Una funzione definita dall'utente (UDF) è una routine che può acquisire parametri, eseguire calcoli o altre azioni e restituire un risultato. E come suggerisce il nome, è definito e creato dall'utente. In questo caso, l'“utente” è il programmatore SQL, il DBA o chi ha scritto la funzione.
Il termine funzione definita dall'utente la distingue dalle funzioni integrate fornite con SQL Server.
È possibile specificare se l'UDF accetterà o meno i parametri e, in tal caso, i loro nomi, tipi di dati, ecc. Ad esempio, è possibile scrivere un'UDF che accetti un ID prodotto come argomento. La funzione può quindi utilizzarlo nel suo calcolo. Ciò significa che l'output della funzione dipenderà dall'input che le viene fornito quando viene invocata.
Una volta che un UDF è stato creato, può essere invocato.
Richiamo di una funzione definita dall'utente
Il codice all'interno della funzione non viene eseguito quando viene creata la funzione. Viene eseguito solo quando la funzione è richiamata .
"Invocare" una funzione viene talvolta definito "chiamare" una funzione. Questo è quando ottieni la funzione per fare ciò per cui è stata creata. Fondamentalmente, crei una funzione e poi rimane lì in attesa di essere invocata.
Puoi invocare un UDF dal tuo codice T-SQL, proprio come chiameresti una funzione di sistema. Ad esempio, potresti usare un UDF in un WHERE
clausola per restringere i risultati di un SELECT
dichiarazione. Puoi anche usarlo nell'elenco delle colonne da restituire.
Le UDF possono essere utilizzate anche nelle colonne calcolate. Questo può essere utile se hai bisogno di una colonna calcolata per accedere ai dati in un'altra colonna.
Parametri
Una funzione definita dall'utente può accettare fino a 1024 parametri di input. Tuttavia, se necessario, puoi anche definire una funzione senza parametri.
Un esempio di funzione incorporata senza alcun parametro è GETDATE()
. Questa funzione restituisce semplicemente il timestamp del sistema di database corrente. Non c'è bisogno di passare alcun parametro per ottenerlo.
Un esempio di una funzione definita dall'utente con un singolo parametro potrebbe essere quella che restituisce i dettagli di contatto di un cliente in base all'ID del cliente. Quando si chiama la funzione, si passa l'ID cliente alla funzione come parametro. La funzione può quindi cercare i dettagli del cliente e restituirli nella variabile di ritorno. Se trasmetti l'ID di un cliente diverso, la funzione restituirà i dettagli per quel cliente.
Vantaggi delle funzioni definite dall'utente
Alcuni dei principali vantaggi delle UDF includono quanto segue.
- Programmazione modulare
- Le UDF ti consentono di scrivere il codice una volta, quindi chiamarlo tutte le volte che è necessario. Non c'è bisogno di riscrivere lo stesso codice ogni volta che devi fare la stessa cosa. Chiama invece semplicemente la funzione. Questo è anche utile se qualcosa cambia. Devi solo aggiornarlo in un posto:la funzione. Se non hai utilizzato la funzione, dovresti aggiornarla in più posizioni nell'applicazione.
- Prestazioni
- Le UDF riducono il costo di compilazione del codice T-SQL memorizzando nella cache i piani e riutilizzandoli per esecuzioni ripetute. L'UDF non ha bisogno di essere rianalizzato e riottimizzato ad ogni utilizzo. Ciò si traduce in tempi di esecuzione molto più rapidi.
- Traffico di rete ridotto
- Un'operazione che filtra i dati in base a un vincolo complesso che non può essere espresso in una singola espressione scalare può essere espressa come una funzione. La funzione può quindi essere invocata in
WHERE
clausola per ridurre il numero di righe inviate al client.
Le UDF possono anche avere altri vantaggi più specifici, come nell'esempio precedente che ho menzionato con la colonna calcolata che accede ai dati in un'altra tabella.
Tipi di funzioni definite dall'utente
Esistono due tipi di funzioni T-SQL definite dall'utente:
- Funzioni scalari
- Le funzioni scalari definite dall'utente restituiscono un singolo valore di dati. Definisci il tipo di valore nella funzione. Il tipo restituito può essere qualsiasi tipo di dati eccetto testo , ntesto , immagine , cursore e indicatore orario .
- Funzioni con valori di tabella
- Le funzioni con valori di tabella (TVF) restituiscono una tabella. Il loro tipo di restituzione è quindi tabella . Esistono due tipi di TVF:TVF in linea e TVF a più dichiarazioni. Un TVF in linea non ha un corpo funzione. La sua tabella di ritorno è il risultato di un singolo
SELECT
dichiarazione. Un TVF a più dichiarazioni d'altra parte, ha un corpo di funzione. Con TVF a più istruzioni, specifichi la struttura della tabella nella variabile di ritorno.
È inoltre possibile creare funzioni scalari e con valori di tabella come funzioni CLR (Common Language Runtime) definite dall'utente.
A partire da SQL Server 2005 (9.x), puoi scrivere funzioni definite dall'utente in qualsiasi linguaggio di programmazione Microsoft .NET Framework, come Microsoft Visual Basic .NET o Microsoft Visual C#.