Đồng ý với những gì mọi người khác đã nói. Đơn giản chỉ cần cho ý kiến từ một góc độ khác, nếu bạn cố gắng thiết lập ansi_nulls
để tắt, bạn có thể có được những gì bạn mong đợi:
set ansi_nulls off
if 1 = null
select 'a'
else
select 'b' -- Returned
if 1 != null
select 'a' -- Returned
else
select 'b'
Thông tin thêm từ sách trực tuyến:
Khi SET ANSI_NULLS là OFF, Equals (=) và không bằng (<>) toán tử so sánh không tuân theo tiêu chuẩn ISO. Câu lệnh SELECT sử dụng WHERE column_name = NULL trả về các hàng mà có giá trị null trong cột_name. Câu lệnh SELECT sử dụng WHERE column_name <> NULL trả về các hàng có giá trị không trống trong cột . Ngoài ra, một câu lệnh SELECT sử dụng WHERE column_name <> XYZ_value trả về tất cả các hàng không phải là XYZ_value và không phải là NULL.
Đó là ansi_nulls off
giải thích. Tuy nhiên, không bị cám dỗ chỉ đơn giản là tắt vì:
Trong một phiên bản tương lai của SQL Server, ANSI_NULLS sẽ luôn là ON và bất kỳ ứng dụng mà thiết lập một cách rõ ràng tùy chọn để OFF sẽ tạo lỗi. Tránh sử dụng tính năng này trong công việc phát triển mới và lập kế hoạch để sửa đổi các ứng dụng hiện đang sử dụng tính năng này.
Thực hiện theo các khuyến nghị dưới đây thay vì:
Đối với một kịch bản để làm việc như dự định, không phụ thuộc vào tùy chọn cơ sở dữ liệu ANSI_NULLS hoặc các thiết lập của SET ANSI_NULLS, sử dụng IS NULL và IS NOT NULL trong so sánh có thể chứa giá trị null.
if 1 is null
select 'a'
else
select 'b' -- Returned
if 1 is not null
select 'a' -- Returned
else
select 'b'
Nguồn
2013-05-16 22:38:03
Bạn không thể bằng 'không có gì'. – sircodesalot
'NULL' không bao giờ bằng, không bằng, lớn hơn hoặc ít hơn bất cứ thứ gì. –
Thật sao? Nó không thể không bằng nhau? –