sql >> Database >  >> RDS >> Sqlserver

SQL - Verschil tussen COALESCE en ISNULL?

COALESCE en ISNULL vergelijken

De ISNULL-functie en de COALESCE-expressie hebben een soortgelijk doel, maar kunnen zich anders gedragen.

  1. Omdat ISNULL een functie is, wordt deze slechts één keer geëvalueerd. Zoals hierboven beschreven, kunnen de invoerwaarden voor de COALESCE-expressie meerdere keren worden geëvalueerd.
  2. De bepaling van het gegevenstype van de resulterende expressie is anders. ISNULL gebruikt het gegevenstype van de eerste parameter, COALESCEvolgt de CASE-expressieregels en retourneert het gegevenstype met de hoogste prioriteit.
  3. De NULL-mogelijkheid van de resultaatexpressie is anders voor ISNULL en COALESCE. De geretourneerde ISNULL-waarde wordt altijd beschouwd als NIET NULL-geschikt (ervan uitgaande dat de geretourneerde waarde een waarde zonder nul is), terwijl COALESCE met niet-null-parameters wordt beschouwd als NULL. Dus de uitdrukkingen ISNULL(NULL, 1) enCOALESCE(NULL, 1), hoewel equivalent, hebben verschillende nullabiliteitswaarden. Dit maakt een verschil als u deze uitdrukkingen in berekende kolommen gebruikt, sleutelbeperkingen maakt of de geretourneerde waarde van een scalaire UDF-deterministisch maakt, zodat deze kan worden geïndexeerd zoals in het volgende voorbeeld wordt getoond.
> USE tempdb; 
> GO

> -- This statement fails because the PRIMARY KEY cannot accept NULL values
> -- and the nullability of the COALESCE expression for col2 
> -- evaluates to NULL. 

> CREATE TABLE #Demo  (  col1 integer NULL,  col2 AS COALESCE(col1, 0) PRIMARY KEY,  col3 AS ISNULL(col1, 0)  ); 
> 
> -- This statement succeeds because the nullability of the 
> -- ISNULL function evaluates AS NOT NULL.
> 
> CREATE TABLE #Demo  (  col1 integer NULL,  col2 AS COALESCE(col1, 0), 
> col3 AS ISNULL(col1, 0) PRIMARY KEY  );

Validaties voor ISNULL en COALESCE zijn ook verschillend. Een NULL-waarde voor ISNULL wordt bijvoorbeeld geconverteerd naar int, terwijl u voor COALESCE een gegevenstype moet opgeven.ISNULL gebruikt slechts 2 parameters, terwijl COALESCE een variabel aantal parameters nodig heeft.

Bron:BOL



  1. php include error kan het pad niet vinden

  2. Hoe maak je een index voor elementen van een array in PostgreSQL?

  3. ExecuteNonQuery:verbindingseigenschap is niet geïnitialiseerd.

  4. ReadyCloud ReadyShipper X