sql >> Databáze >  >> RDS >> Sqlserver

SQL - Rozdíl mezi COALESCE a ISNULL?

Porovnání COALESCE a ISNULL

Funkce ISNULL a výraz COALESCE mají podobný účel, ale mohou se chovat odlišně.

  1. Protože ISNULL je funkce, je vyhodnocena pouze jednou. Jak je popsáno výše, vstupní hodnoty pro výraz COALESCE lze vyhodnotit vícekrát.
  2. Určení datového typu výsledného výrazu je různé. ISNULL používá datový typ prvního parametru, COALESCE se řídí pravidly výrazu CASE a vrací datový typ hodnoty s nejvyšší prioritou.
  3. Možnost NULL výsledného výrazu se liší pro ISNULL a COALESCE. Návratová hodnota ISNULL je vždy považována za hodnotu NOT NULL (za předpokladu, že vrácená hodnota je bez možnosti Null), zatímco COALESCE s parametry bez hodnoty Null je považována za hodnotu NULL. Takže výrazy ISNULL(NULL, 1) a COALESCE(NULL, 1), ačkoli jsou ekvivalentní, mají různé hodnoty nullability. To je rozdíl, pokud používáte nepočítané sloupce s těmito výrazy, vytváříte klíčová omezení nebo děláte návratovou hodnotu skalárního UDF deterministickou, aby mohl být indexován, jak je ukázáno v následujícím příkladu.
> 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  );

Ověření pro ISNULL a COALESCE se také liší. Například hodnota NULL pro ISNULL se převede na int, zatímco pro COALESCE musíte zadat datový typ. ISNULL přebírá pouze 2 parametry, zatímco COALESCE přebírá proměnný počet parametrů.

Zdroj:BOL



  1. Přehled důvěryhodných rozšíření v PostgreSQL 13

  2. Jak TIME() funguje v MariaDB

  3. SQL Server 2008 - řazení podle řetězců s číselným číslem

  4. Jak přidat uživatelskou skupinu Active Directory jako přihlášení na SQL Server