SQL值查询为空值

时间:2010-10-11 12:31:30

标签: c# sql sql-server null

在我的C#代码中,我必须像这样执行SQL查询:

context.ExecuteStoreQuery("SELECT * FROM MyTable WHERE Field0 = {0} AND 
    Field1 = {1}", field0, field1)

当c中的field1 = null且数据库中为NULL时,此查询不起作用。 (我必须使用与IS NULL不同的语法)

如何在不制作if的情况下纠正此问题(实际上,我有10个字段......)?

4 个答案:

答案 0 :(得分:4)

默认情况下,SQL Server不允许您将值与null进行比较。所有比较都解析为false,即使是逻辑相反的也是如此。换句话说,你可以这样做:

where field = 1where field <> 1。如果field为null,则逻辑上都解析为false。

在任何情况下,您都需要在查询中明确检查null

context.ExecuteStoreQuery(@"SELECT * FROM MyTable WHERE 
    (Field0 = {0} or (Field0 is null and {0} is null))  AND 
    (Field1 = {1} or (Field1 is null and {0} is null))", field0, field1)

答案 1 :(得分:0)

您可以使用if语句的简短变体。 如果没有if语句,我认为你不能处理你的问题。 例如:

String.Format("SELECT * FROM MyTable WHERE Field0 {0} ", value==null ? "IS NULL" : String.Format("= {0}", value))

也可以使用“@ParameterName”

来参数化查询
context.ExecuteStoreQuery<ProductionUnit>(
  String.Format("SELECT * FROM MyTable WHERE Field0 {0} @Parameter1",
  value==null ? "IS", "="), new SqlParameter("@Parameter1", value));

此致

答案 2 :(得分:0)

public string appendCondition(String sqlQuery, String field, Object value)
{ 
 string resultQuery = sqlQuery + " " + value == null ? " IS NULL " : "=" + value.ToString();
 return resultQuery;
}

希望你能添加简单的逻辑来自己添加“WHERE”或“AND”。

答案 3 :(得分:0)

好吧,我要做的第一件事就是删除select *。 BAD!

我要做的第二件事是将其作为存储过程。

    create procedure dbo.MyTableSelect
    @field0 int,
    @field1 int=null
as
begin

    select
        *
    from MyTable
    where Field0=@field0
        and (@field1 is null or Field1=@field1)



end

然后您可以将代码更改为此

context.ExecuteStoreQuery("exec dbo.MyTableSelect @field0={0}, @field1 = {1}", field0, field1)