所以我有一个简单的查询,返回产品列表
SELECT Model, CategoryID
FROM Products
WHERE (Model = '010-00749-01')
这返回
010-00749-01 00000000-0000-0000-0000-000000000000
010-00749-01 NULL
正确,所以我只需要CategoryID不是'00000000-0000-0000-0000-0000-000000000000'的产品,所以我有
SELECT Model, CategoryID
FROM Products
WHERE (Model = '010-00749-01')
AND (CategoryID <> '00000000-0000-0000-0000-000000000000')
但这不会返回任何结果。所以我将查询更改为
SELECT Model, CategoryID
FROM Products
WHERE (Model = '010-00749-01')
AND ((CategoryID <> '00000000-0000-0000-0000-000000000000') OR (CategoryID IS NULL))
哪个返回预期结果
010-00749-01 NULL
有人可以向我解释这种行为吗?
MS SQL Server发行日为2008
最佳答案
请查看Books Online的完整引用-默认情况下ANSI_NULLS处于启用状态,这意味着您需要使用已完成的方法。否则,您可以在查询开始时将该设置切换为“关闭”,以轮换进行该行为。
这是一个简单的示例,用于演示与NULL比较有关的行为:
-- This will print TRUE
SET ANSI_NULLS OFF;
IF NULL <> 'A'
PRINT 'TRUE'
ELSE
PRINT 'FALSE'
-- This will print FALSE
SET ANSI_NULLS ON;
IF NULL <> 'A'
PRINT 'TRUE'
ELSE
PRINT 'FALSE'