NULL 不等于 NULL,使用 IS NULL 进行空行检查:
SELECT * FROM Fruit WHERE Banana IS NULL
在这种情况下,因为变量中有 NULL,所以可以使用 ISNULL 运算符:
SELECT * FROM Fruit WHERE ISNULL(Banana, 0) = ISNULL(@FruitInput, 0)
这将确保您可以检查任何值 NULL 或以其他方式比较 0 和 0 - 显然,如果您有 Banana 为 NULL 且 @FruitInput 为 0 的行,这将匹配它们,根据需要进行调整
(例如,您可以使用 -1 或字符串)
SELECT * FROM Fruit WHERE ISNULL(Banana, '') = ISNULL(@FruitInput, '')
编辑:不,你不能因为某种原因 0 = '' 在 SQL 中......?!
我想这样做的方法(可能不是那么高效,我没有检查过计划)是:
select * from Fruit
where 1 = CASE
WHEN @FruitInput IS NULL AND banana IS NULL THEN 1
WHEN @FruitInput = banana THEN 1
ELSE 0
END