Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL — różnica między COALESCE i ISNULL?

Porównanie COALESCE i ISNULL

Funkcja ISNULL i wyrażenie COALESCE mają podobny cel, ale mogą zachowywać się inaczej.

  1. Ponieważ ISNULL jest funkcją, jest oceniany tylko raz. Jak opisano powyżej, wartości wejściowe wyrażenia COALESCE mogą być oceniane wielokrotnie.
  2. Określenie typu danych wynikowego wyrażenia jest inne. ISNULL używa typu danych pierwszego parametru, COALESCE przestrzega reguł wyrażenia CASE i zwraca typ danych value o najwyższym priorytecie.
  3. Prawność NULL wyrażenia wyniku jest inna dla ISNULL i COALESCE. Wartość zwracana ISNULL jest zawsze uważana za NIE NULL (przy założeniu, że wartość zwracana jest wartością nie dopuszczającą wartości NULL), podczas gdy COALESCE z parametrami innymi niż NULL jest uważana za NULL. Zatem wyrażenia ISNULL(NULL, 1) i COALESCE(NULL, 1), chociaż są równoważne, mają różne wartości dopuszczalności wartości null. Ma to znaczenie, jeśli używasz tych wyrażeń z nieobliczonymi kolumnami, tworząc ograniczenia kluczowe lub sprawiając, że zwracana wartość skalarnego UDF jest deterministyczna, aby mogła być indeksowana, jak pokazano w poniższym przykładzie.
> 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  );

Walidacje dla ISNULL i COALESCE są również różne. Na przykład wartość NULL dla ISNULL jest konwertowana na int, podczas gdy dla COALESCE, musisz podać typ danych. ISNULL przyjmuje tylko 2 parametry, podczas gdy COALESCE przyjmuje zmienną liczbę parametrów.

Źródło:BOL



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmuś Oracle do zwrócenia TOP N wierszy z SKIP LOCKED

  2. Uzyskaj informacje o widoku za pomocą widoku schematu informacji WIDOKÓW w SQL Server

  3. Utwórz bazę danych w SQL Server 2017

  4. Jak filtrować obiekty w SQL Server Management Studio (SSMS) — samouczek SQL Server / TSQL, część 19

  5. Uzyskaj rozmiar wszystkich tabel w bazie danych