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

SQL Server IF so với IIF ():Sự khác biệt là gì?

Sinh viên học một ngôn ngữ lập trình mới thường sẽ bắt đầu bài học đầu tiên bằng IF câu lệnh, trong đó câu lệnh của họ sẽ trả về một giá trị chỉ khi biểu thức là đúng.

Sau đó, chúng có thể tiến triển thành IF... ELSE câu lệnh, nơi họ có thể xác định một giá trị khác để trả về nếu biểu thức là sai. Vì vậy, do đó, hãy trả về một giá trị nếu biểu thức là đúng và một giá trị khác nếu biểu thức là sai.

SQL Server chắc chắn bao gồm IF... ELSE trong hộp công cụ T-SQL của nó.

SQL Server cũng bao gồm IIF() , thực hiện một công việc tương tự, nhưng với cú pháp ngắn gọn hơn.

Nhưng có một số khác biệt nhỏ.

Sự khác biệt

Bảng sau đây trình bày những điểm khác biệt chính giữa IF và câu lệnh IIF() chức năng.

IF IIF()
Loại Câu lệnh điều khiển luồng. Hàm logic.
Kết quả được xác định như thế nào? Bạn chỉ định câu lệnh SQL hoặc khối câu lệnh để thực thi. Bạn chỉ định giá trị thực tế để trả về.
Làm tổ? Giới hạn số cấp lồng nhau tùy thuộc vào bộ nhớ khả dụng. Chỉ có thể được lồng vào nhau ở mức tối đa là 10.
Điều gì sẽ xảy ra nếu biểu thức trả về false? ELSE từ khóa là tùy chọn (tức là bạn có thể chọn có phục vụ cho các kết quả sai hay không). Yêu cầu cả giá trị đúng và sai (nghĩa là bạn phải đáp ứng cho các kết quả sai).

IIF() hàm thực sự là một cách viết tắt để viết CASE biểu hiện. Do đó, nó có chung những hạn chế như CASE biểu thức khác với IF tuyên bố.

Câu lệnh IF

Đây là IF tuyên bố.

IF 1 < 2 SELECT 'True';

Kết quả:

True

Trong trường hợp này, biểu thức để đánh giá là 1 < 2 . Đúng là 1 nhỏ hơn 2 nên SELECT câu lệnh đã được chạy và True đã được trả lại.

Tuy nhiên, nếu biểu thức là false, sẽ không có gì xảy ra.

IF 1 > 2 SELECT 'True';

Kết quả:

Commands completed successfully.

Tất cả những gì SQL Server nói với tôi là lệnh đã hoàn tất thành công. Không có gì khác được trả lại, vì không có gì khác được chỉ định.

Câu lệnh IF… ELSE

Trong trường hợp này, chúng ta có thể thêm ELSE tùy chọn đến IF để nó trở thành một câu lệnh IF... ELSE tuyên bố.

IF 1 > 2
       SELECT 'True';
ELSE 
       SELECT 'False';

Kết quả:

False

Bây giờ chúng ta cũng nhận được kết quả khi biểu thức là sai.

Hàm IIF ()

IIF() hàm cho phép chúng ta viết cùng một logic bằng cách sử dụng một cú pháp ngắn gọn hơn.

Do đó, chúng tôi có thể viết lại ví dụ trước thành sau:

SELECT IIF( 1 > 2, 'True', 'False' );

Kết quả:

False

IIF() về cơ bản hàm là một cách ngắn gọn hơn để thực hiện IF... ELSE tuyên bố.

Trên thực tế, điều đó chỉ đúng một phần. Như đã đề cập, IIF() chức năng dựa trên CASE và do đó có cùng các hạn chế của CASE biểu thức (chẳng hạn như chỉ có thể lồng vào mức tối đa là 10).

Do đó, câu lệnh trước tương đương với câu lệnh sau.

SELECT 
  CASE WHEN 1 > 2 THEN 'True'
    ELSE 'False'
  END;

Kết quả:

False

Lưu ý rằng IIF() yêu cầu hai đối số và do đó, bạn được yêu cầu chỉ định một giá trị để trả về nếu kết quả biểu thức là false (ngay cả khi bạn chỉ định NULL hoặc một chuỗi trống).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có kiểu dữ liệu Boolean trong Microsoft SQL Server giống như trong MySQL không?

  2. Phải khai báo biến vô hướng @Id?

  3. Cách khắc phục “Không thành công câu lệnh ALTER TABLE SWITCH” Msg 4982 (SQL Server)

  4. Trả lại nhiều bảng từ một thủ tục được lưu trữ

  5. Cài đặt SQL Server 2016