我需要筛选记录,条件如下:
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
时会失败。我通过这个问题知道了其中的原因。但是,如果我采用该问题答案中建议的方法(使用
NotificationRead IN (@Query) OR NotificationRead IS NULL
),则会获取所有记录,即使我不需要它们,例如当@GetRead = 1
时,也会获取NotificationRead = NULL
的记录。请问你能指导我正确的方向吗?
SQL Server
的上下文中,您不能在IN
子句中使用NULL
,因为NULL
无法与其他值/变量进行比较。例如,以下语句将不返回任何内容:SELECT * FROM [dbo].[TEST] WHERE [TestColumn] IN (NULL)
。 - gotqn