SQL Server-如何在CASE-THEN语句中同时使用null和value?

SQL Server-如何在CASE-THEN语句中同时使用null和value?,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我在使用CASE when语句时遇到问题,因为where column是值字符串必须使用这样的等号 SELECT * FROM table WHERE (field = (CASE WHEN @PaidStatus = 1 THEN 'HELLO' ELSE NULL END) 但是空值不能与相等运算符进行比较(我需要编写其中field为null而不是其中field=null) 那么我该怎么做呢?要仅返回field=参数值的行,或者如果参数为NULL,则返回所有行,那么: SELECT *

我在使用
CASE when
语句时遇到问题,因为where column是值字符串必须使用这样的等号

SELECT * 
FROM table
WHERE (field = (CASE WHEN @PaidStatus = 1 THEN 'HELLO' ELSE NULL END) 
但是空值不能与相等运算符进行比较(我需要编写
其中field为null
而不是
其中field=null


那么我该怎么做呢?

要仅返回field=参数值的行,或者如果参数为NULL,则返回所有行,那么:

SELECT * 
FROM table
WHERE (field = @PaidStatus OR @PaidStatus IS NULL)
对于其他组合,例如参数值为1,则字段等于“HELLO”,或者,如果参数为null,则所有行都等于:

SELECT * 
FROM table
WHERE ((field = 'HELLO' AND @PaidStatus = 1) OR @PaidStatus IS NULL)
小心使用括号,你可能会发现缩进更容易理解,例如

SELECT * 
FROM table
WHERE (
         (field = 'HELLO' AND @PaidStatus = 1) 
      OR (field = 'GOODBYE' AND @PaidStatus = 2) 
      OR @PaidStatus IS NULL
      )

要仅返回字段=参数值的行,或返回参数为NULL的所有行,请执行以下操作:

SELECT * 
FROM table
WHERE (field = @PaidStatus OR @PaidStatus IS NULL)
对于其他组合,例如参数值为1,则字段等于“HELLO”,或者,如果参数为null,则所有行都等于:

SELECT * 
FROM table
WHERE ((field = 'HELLO' AND @PaidStatus = 1) OR @PaidStatus IS NULL)
小心使用括号,你可能会发现缩进更容易理解,例如

SELECT * 
FROM table
WHERE (
         (field = 'HELLO' AND @PaidStatus = 1) 
      OR (field = 'GOODBYE' AND @PaidStatus = 2) 
      OR @PaidStatus IS NULL
      )

这样行吗

SELECT * 
FROM table
WHERE (field = 'HELLO' AND @PaidStatus = 1)
   OR (field IS NULL AND @PaidStatus <> 1)
选择*
从桌子上
其中(字段='HELLO'和@PaidStatus=1)
或(字段为空且@PaidStatus 1)

这会奏效吗

SELECT * 
FROM table
WHERE (field = 'HELLO' AND @PaidStatus = 1)
   OR (field IS NULL AND @PaidStatus <> 1)
选择*
从桌子上
其中(字段='HELLO'和@PaidStatus=1)
或(字段为空且@PaidStatus 1)

使案例语法有效吗?
案例
返回一个值,并且在时可以有多个

因此,您可以与返回的值进行比较

SELECT * 
FROM table
WHERE 
(CASE 
 WHEN @PaidStatus = 1 AND field = 'HELLO' THEN 1
 WHEN field IS NULL THEN 2
 ELSE 0
 END) > 0
如果您在
案例中有许多不同的标准,这将非常方便
但是如果只有2,那么只使用
会更短

SELECT * 
FROM table
WHERE (field IS NULL OR (@PaidStatus = 1 AND field = 'HELLO'));

使案例的语法有效吗?
案例
返回一个值,并且在
时可以有多个

因此,您可以与返回的值进行比较

SELECT * 
FROM table
WHERE 
(CASE 
 WHEN @PaidStatus = 1 AND field = 'HELLO' THEN 1
 WHEN field IS NULL THEN 2
 ELSE 0
 END) > 0
如果您在
案例中有许多不同的标准,这将非常方便
但是如果只有2,那么只使用
会更短

SELECT * 
FROM table
WHERE (field IS NULL OR (@PaidStatus = 1 AND field = 'HELLO'));

提示:
大小写表达式
计算为单个值,概念上不如
语句
大,例如
选择语句
更新语句
提示:
大小写表达式
计算为单个值,概念上不如
语句
大,例如
select语句
update语句