C# 选择查询值可以为空的查询
MS SQL Server中的My table mytable如下所示:C# 选择查询值可以为空的查询,c#,sql-server,tsql,select,null,C#,Sql Server,Tsql,Select,Null,MS SQL Server中的My table mytable如下所示: |Id|ka|kb|kc |kd |1 | 1| 1|NULL|NULL |2 | 1| 1|1 |NULL |3 | 1| 1|1 |1 其中Id、ka-kb不能为null,但kc和kd可以为null 我可以从mytable中选择同样可以为null的变量吗 我希望mytable中的Id为1,只有1,但我在C中得到了NULL,或者在T-SQL中没有结果。您似乎在寻找一个NULL安全的等式。在标准SQL中,我们有
|Id|ka|kb|kc |kd
|1 | 1| 1|NULL|NULL
|2 | 1| 1|1 |NULL
|3 | 1| 1|1 |1
其中Id、ka-kb不能为null,但kc和kd可以为null
我可以从mytable中选择同样可以为null的变量吗
我希望mytable中的Id为1,只有1,但我在C中得到了NULL,或者在T-SQL中没有结果。您似乎在寻找一个NULL安全的等式。在标准SQL中,我们有不同于的运算符,但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 )
不,如果您正在编写T-SQL,那么几乎总是要使用ANSI null行为,这意味着null永远不等于任何东西:甚至不等于null——您需要使用is null来测试null。但是,不清楚您是如何添加参数的,所以我不清楚您在这里做什么。
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 )