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

Che cos'è un UDF scalare in SQL Server?

In SQL Server, una UDF scalare, o funzione scalare definita dall'utente, è una funzione definita dall'utente che restituisce un singolo valore.

Ciò è in contrasto con una funzione con valori di tabella, che restituisce un set di risultati sotto forma di tabella.

Le funzioni definite dall'utente possono essere scritte come UDF T-SQL o come UDF CLR (Common Language Runtime). CLR consente di creare UDF in codice gestito utilizzando qualsiasi linguaggio di programmazione .NET Framework. Queste funzioni sono quindi accessibili a T-SQL o altro codice gestito.

Esempio 1 – UDF scalare di base

Ecco un esempio del codice utilizzato per creare una UDF scalare T-SQL di base.

CREATE FUNCTION dbo.ufn_discountPrice( 
    @price DECIMAL(12,2), 
    @discount DECIMAL(12,2) 
    ) 
RETURNS DECIMAL (12,2)
AS
BEGIN
  RETURN @price * (1 - @discount);
END;

Questa UDF scalare accetta due parametri; @price e @discount . Questi vengono passati alla funzione come argomenti ogni volta che la funzione viene invocata. La funzione prende il valore di quegli argomenti, esegue un calcolo utilizzando quei valori, quindi restituisce il valore risultante. In questo caso viene restituito il prezzo scontato.

Esempio 2 – Richiamare l'UDF

Una volta che l'UDF è stato creato, può essere invocato all'interno del codice T-SQL ogni volta che ne hai bisogno.

Ecco un esempio di richiamo dell'UDF:

SELECT dbo.ufn_discountPrice(100, .2) AS Result;

Risultato

+----------+
| Result   |
|----------|
| 80.00    |
+----------+

Puoi anche utilizzare UDF scalari nelle colonne calcolate. Questo può essere particolarmente utile se hai bisogno della colonna calcolata per accedere ai dati in un'altra tabella.

Opzioni funzione

Quando crei una UDF scalare, ci sono varie opzioni che puoi applicare alla funzione.

Ad esempio, puoi specificare se deve essere associato o meno allo schema. È possibile specificare che deve essere crittografato. Puoi anche specificare un EXECUTE AS clausola per specificare il contesto di sicurezza in cui viene eseguita la funzione definita dall'utente.

Consulta la documentazione Microsoft per un elenco dettagliato delle opzioni che puoi fornire durante la creazione o la modifica di una funzione definita dall'utente.

Tipo di dati parametro

Per le funzioni T-SQL, sono consentiti tutti i tipi di dati, inclusi i tipi CLR definiti dall'utente e i tipi di tabella definiti dall'utente, eccetto timestamp e il cursore non scalare e tabella tipi.

Per le funzioni CLR, sono consentiti tutti i tipi di dati, inclusi i tipi CLR definiti dall'utente, eccetto testo , ntesto , immagine , tipi di tabella definiti dall'utente, timestamp tipi di dati e il cursore non scalare e tabella tipi.

Tipo di dati di ritorno

Il tipo di dati restituito per le UDF scalari T-SQL può essere qualsiasi tipo di dati eccetto timestamp e il cursore non scalare e tabella tipi.

Le funzioni CLR possono utilizzare qualsiasi tipo di dati eccetto testo , ntesto , immagine , indicatore orario e il cursore non scalare e tabella tipi.

Entrambe le funzioni T-SQL e CLR possono avere un tipo CLR definito dall'utente per il valore restituito.