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

SQL - Forskel mellem COALESCE og ISNULL?

Sammenligning af COALESCE og ISNULL

ISNULL-funktionen og COALESCE-udtrykket har et lignende formål, men kan opføre sig anderledes.

  1. Fordi ISNULL er en funktion, evalueres den kun én gang. Som beskrevet ovenfor kan inputværdierne for COALESCE-udtrykket evalueres flere gange.
  2. Datatypebestemmelse af det resulterende udtryk er forskellig. ISNULL bruger datatypen for den første parameter, COALESCE følger CASE-udtryksreglerne og returnerer datatypen værdi med den højeste prioritet.
  3. NUL-værdien af ​​resultatudtrykket er forskellig for ISNULL og COALESCE. ISNULL-returværdien anses altid for at være IKKE NULLbar (forudsat at returværdien er en ikke-nullbar), mens COALESCE med ikke-nul-parametre anses for at være NULL. Så udtrykkene ISNULL(NULL, 1) ogCOALESCE(NULL, 1), selvom de er ækvivalente, har forskellige nulværdier. Dette gør en forskel, hvis du bruger disse udtryk incomputed kolonner, skaber nøglebegrænsninger eller gør returværdien af ​​en skalar UDF deterministisk, så den kan indekseres som vist i følgende eksempel.
> 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 );

Valideringer for ISNULL og COALESCE er også forskellige. For eksempel konverteres en NULL-værdi for ISNULL til int, mens du for COALESCE skal angive en datatype. ISNULL tager kun 2 parametre, mens COALESCE tager et variabelantal af parametre.

Kilde:BOL



  1. MySQL-eksport til outfil:CSV-undslippende tegn

  2. En uventet bivirkning ved at tilføje et filtreret indeks

  3. Sådan tjekker du din MySQL-version

  4. Brug MySQL relationelle databaser på Debian 6 (Squeeze)