Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL - Sự khác biệt giữa COALESCE và ISNULL?

So sánh COALESCE và ISNULL

Hàm ISNULL và biểu thức COALESCE có mục đích tương tự nhưng có thể hoạt động khác nhau.

  1. Vì ISNULL là một hàm nên nó chỉ được đánh giá một lần. Như đã mô tả ở trên, các giá trị đầu vào cho biểu thức COALESCE có thể được đánh giá nhiều lần.
  2. Việc xác định kiểu dữ liệu của biểu thức kết quả là khác nhau. ISNULL sử dụng kiểu dữ liệu của tham số đầu tiên, COALESCE làm theo quy tắc biểu thức CASE và trả về kiểu dữ liệu của giá trị với mức độ ưu tiên cao nhất.
  3. Tính NULL của biểu thức kết quả khác nhau đối với ISNULL và COALESCE. Giá trị trả về của TheISNULL luôn được coi là NOT NULL (giả sử giá trị trả về là không thể rỗng) trong khi COALESCE với các tham số không rỗng được coi là NULL. Vì vậy, các biểu thức ISNULL (NULL, 1) vàCOALESCE (NULL, 1) mặc dù tương đương nhưng có giá trị rỗng khác nhau. Điều này sẽ tạo ra sự khác biệt nếu bạn đang sử dụng các cột xung đột của biểu thức này, tạo các ràng buộc chính hoặc đặt giá trị trả về của một định thức UDF vô hướng để nó có thể được lập chỉ mục như được minh họa trong ví dụ sau.
> 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  );

Các xác thực cho ISNULL vàCOALESCE cũng khác nhau. Ví dụ:giá trị NULL cho ISNULL được chuyển thành int trong khi đối với COALESCE, bạn phải cung cấp kiểu dữ liệu .ISNULL chỉ nhận 2 tham số trong khi COALESCE nhận một số tham số có thể thay đổi.

Nguồn: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. Làm cách nào để kết nối máy chủ sql với php bằng xampp?

  2. câu lệnh sử dụng sql với biến

  3. Cách xem nhật ký giao dịch trong SQL Server 2008

  4. Lưu trữ tệp trong SQL Server

  5. Cơ bản và cách sử dụng gợi ý NOLOCK trong SQL Server