SQL Server có một khả năng duy nhất cho phép bạn thực thi logic lập trình theo thời gian thực trên các giá trị trong truy vấn của bạn. Dựa trên các đánh giá logic đó, bạn có thể tạo ra các giá trị khác nhau như một phần của tập dữ liệu được trả về.
Sử dụng Câu lệnh CASE
Điều này dễ dàng thực hiện nhất trong tất cả các phiên bản của SQL Server bằng cách sử dụng CASE
câu lệnh, hoạt động như một IF...THEN...ELSE
logic và trả về các giá trị khác nhau tùy thuộc vào kết quả.
Trong ví dụ dưới đây, chúng tôi muốn trả về một locale
bổ sung cột chỉ định liệu cuốn sách của chúng tôi diễn ra ở Trung địa hay Trái đất cũ thông thường.
SELECT
CASE
WHEN
books.title = 'The Hobbit'
THEN
'Middle-earth'
WHEN
books.primary_author = 'Tolkien'
THEN
'Middle-earth'
ELSE
'Earth'
END AS locale,
books.*
FROM
books
Trước khi chúng tôi kiểm tra CASE
đặc biệt khía cạnh của câu lệnh này, hãy tạm thời loại bỏ CASE
lưu ý rằng đây là một SELECT
cực kỳ đơn giản tuyên bố trên bề mặt:
SELECT
books.*
FROM
books
Do đó, hãy kiểm tra cách thức CASE
phần có cấu trúc và hành vi hợp lý mà chúng tôi đang thực hiện.
CASE
WHEN
books.title = 'The Hobbit'
THEN
'Middle-earth'
WHEN
books.primary_author = 'Tolkien'
THEN
'Middle-earth'
ELSE
'Earth'
END AS locale
Để bắt đầu, chúng tôi khởi tạo CASE
sau đó chỉ định theo điều kiện nào (WHEN
) CASE
của chúng tôi tuyên bố nên đánh giá một kết quả. Trong ví dụ này, chúng tôi đang kiểm tra books.title
và books.primary_author
; nếu phù hợp với chủ đề Tolkien-esque của chúng tôi, THEN
chúng tôi trả về giá trị ‘Middle-earth.’ Nếu không có trường nào phù hợp với tìm kiếm của chúng tôi, thay vào đó, chúng tôi trả về giá trị của ‘Earth.’
Để sắp xếp lại logic dưới dạng mã psuedo IF...THEN...ELSE
, chúng tôi chỉ yêu cầu SQL đánh giá:
IF
title == 'The Hobbit' OR
primary_author == 'Tolkien'
THEN
RETURN 'Middle-earth'
ELSE
RETURN 'Earth'
END
Cuối cùng, điều quan trọng cần nhớ là CASE
câu lệnh phải luôn được nối vào cuối bằng END
phù hợp tuyên bố. Trong ví dụ trên, chúng tôi cũng đang đổi tên giá trị kết quả được trả về locale
, mặc dù điều đó chắc chắn là tùy chọn.
Sử dụng Hàm IIF
Nếu bạn đang sử dụng phiên bản SQL hiện đại hơn, sẽ rất hữu ích khi biết rằng SQL Server 2012 đã giới thiệu IIF
rất tiện dụng hàm số. IIF
là một phương pháp viết tắt để thực hiện IF...ELSE
/ CASE
và trả về một trong hai giá trị, tùy thuộc vào đánh giá của kết quả.
Cấu trúc lại ví dụ trên của chúng tôi để sử dụng IIF
khá đơn giản.
SELECT
IIF(
books.title = 'The Hobbit' OR books.primary_author = 'Tolkien',
'Middle-earth',
'Earth')
AS locale,
books.*
FROM
books
Với IIF
, chúng tôi thay thế phần lớn rất nhiều cú pháp từ CASE
câu lệnh với một vài dấu phẩy phân tách đơn giản để phân biệt các đối số của chúng ta.
Tất cả đã nói, cả CASE
và IIF
hoàn thành công việc tương tự, nhưng nếu được lựa chọn, IIF
nói chung sẽ đơn giản hơn nhiều để sử dụng.