我在MS SQL Server中的表"mytable"看起来像:
|Id|ka|kb|kc |kd
|1 | 1| 1|NULL|NULL
|2 | 1| 1|1 |NULL
|3 | 1| 1|1 |1
其中 Id、ka kb 不能为空,但 kc 和 kd 可以为空。
我可以从我的表中选择变量也可以为空吗?
int? varka = 1, varkb = 1, varkc = null, varkd = null;
select Id from mytable where ka = varka and kb = varkb and kc = varkc and kd = varkd
我从 mytable 中想要的 ID 是"1",只有"1",但我在 C# 中得到一个 NULL,或者在 T-SQL 中没有结果。
您似乎正在寻找空安全相等。在标准SQL中,我们有运算符IS DISTINCT FROM
,但SQL Server不支持它(并且不提供等效的运算符(。
所以我们只剩下布尔逻辑:
select id
from mytable
where
ka = varka
and kb = varkb
and ( (kc is null and varkc is null) or kc = varkc )
and ( (kd is null and varkd is null) or kd = varkd )