Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL - Perbedaan antara COALESCE dan ISNULL?

Membandingkan COALESCE dan ISNULL

Fungsi ISNULL dan ekspresi COALESCE memiliki tujuan yang sama tetapi dapat berperilaku berbeda.

  1. Karena ISNULL adalah sebuah fungsi, maka hanya dievaluasi sekali. Seperti dijelaskan di atas, nilai input untuk ekspresi COALESCE dapat dievaluasi beberapa kali.
  2. Penentuan tipe data dari ekspresi yang dihasilkan berbeda. ISNULL menggunakan tipe data dari parameter pertama, COALESCE mengikuti aturan ekspresi CASE dan mengembalikan tipe data nilai dengan prioritas tertinggi.
  3. Kemampuan NULL dari ekspresi hasil berbeda untuk ISNULL dan COALESCE. Nilai kembalian ISNULL selalu dianggap NOT NULLable (dengan asumsi nilai pengembalian tidak dapat dibatalkan) sedangkan COALESCE dengan parameter non-null dianggap NULL. Jadi ekspresi ISNULL(NULL, 1) danCOALESCE(NULL, 1) meskipun ekivalen memiliki nilai nullability yang berbeda. Ini membuat perbedaan jika Anda menggunakan ekspresi ini dalam kolom yang dihitung, membuat batasan kunci, atau membuat nilai balik dari UDF skalar deterministik sehingga dapat diindeks seperti yang ditunjukkan pada contoh berikut.
> 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  );

Validasi untuk ISNULL dan COALESCE juga berbeda. Misalnya, nilai NULL untuk ISNULL dikonversi ke int sedangkan untuk COALESCE, Anda harus memberikan tipe data.ISNULL hanya membutuhkan 2 parameter sedangkan COALESCE mengambil variabeljumlah parameter.

Sumber: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. Apa cara terbaik untuk menguji koneksi SQL Server secara terprogram?

  2. Apa itu Batasan Kunci Utama dalam Database SQL Server - Tutorial SQL Server / T-SQL Bagian 54

  3. Cara membuat Batasan Kunci Asing Dengan ON UPDATE CASCADE di SQL Server - Tutorial SQL Server / TSQL Bagian 79

  4. 5 Kebiasaan Pemantauan Basis Data dari DBA yang Berhasil

  5. 5 Trik untuk Memastikan Kinerja Puncak SQL Server