Differenze tra ISNULL e COALESCE
Scritto da
Antonio Giglio il
venerdì 8 luglio 2011
•
Linguaggio:
• Livello: 100
In sql server ci sono due funzioni utilizzate per ritornare il
primo valore non nullo da un'espressione.
- IsNull( check_expression , replacement_value
)
- Coalesce( expression [ ,...n ] )
Coalesce è una funzione, aggiunta nello standard ANSI SQL-92,
che si traduce in CASE…END.
Ad esempio il richiamo alla funzione COALESCE (V1, V2, . . . ,n )
si traduce come: CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE
(V2, . . . ,n ) END.
Differente è il caso di IsNull che è una funzione T-SQL ed
accetta solo due parametri.
Il tipo di dati ritornato segue delle regole diverse:
- la funzione IsNull utilizza il tipo di dato del primo
parametro;
- la funzione Coalesce invece segue le regole dettate
dall'espressione CASE e ritorna il tipo con maggiore
priorità.
Un'altra differenza è relativa all'eventualità che tutti i
parametri siano nulli, ovvero il risultato di SELECT
IsNull(null,null) è un'espressione corretta che ritorna un tipo int
nullo, mentre il risultato di SELECT Coalesce(null,null) ci ritorna
un errore perchè sql server non è in grado di dare una priorità al
tipo di dati.
Sempre a causa della maggiore priorità, il risultato di
Coalesce([int], [decimal(19,2)]) è di tipo decimal(19,2)
differentemente da IsNull([int], [decimal(19,2)]) che è di tipo
int.
Non per ultimo il fattore delle performance che spesso sono
peggiori nell'utilizzo di Coalesce.
Questo fa la differenza, nell'utilizzo di queste espressioni, in
colonne calcolate, nella creazione di vincoli di chiave o se sono
utilizzate come valore di ritorno di una UDF.
Tags: sql server,sql,T-SQL