【发布时间】:2011-12-16 22:01:16
【问题描述】:
我需要过滤以下记录:
NotificationRead = 0 || NULL --> IF GetRead = 0
NotificationRead = 1 --> IF GetRead = 1
NotificationRead = 0 || 1 || NULL --> IF GetRead = NULL
这是我为此使用的查询:
DECLARE @GetRead BIT
DECLARE @Query VARCHAR(20)
SET @GetRead = NULL
IF @GetRead = 0 SET @Query = '0,NULL'
ELSE IF @GetRead = 1 SET @Query = '1'
ELSE SET @Query = '0,1,NULL'
SELECT * FROM vwNotifications WHERE NotificationRead IN (@Query)
当我在IN 子句中提供NULL 时,上面的查询基本上会失败。
感谢this question,我确实知道原因。
但是,如果我采用该问题的答案中建议的方法(使用NotificationRead IN (@Query) OR NotificationRead IS NULL),我会在我不需要它们时获得所有记录在NotificationRead = NULL 的位置,例如,当@GetRead = 1 时
你能告诉我正确的方向吗?
【问题讨论】:
-
您不能在
IN类中使用NULL,因为NULLs 无法与SQL Server上下文中的其他值/变量进行比较。例如,以下语句将不返回任何内容:SELECT * FROM [dbo].[TEST] WHERE [TestColumn] IN (NULL)
标签: sql sql-server tsql sql-server-2008