繁体   English   中英

具有空值的SQL Server查询

[英]SQL Server query with null value

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

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

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

我如何不做if就纠正这个问题(实际上,我有10个字段...)?

默认情况下,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)

您可以使用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));

问候

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

希望您可以添加简单的逻辑以自己添加“ WHERE”或“ AND”。

好吧,我要做的第一件事就是删除选择*。 坏!

我要做的第二件事是使它成为存储过程。

    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) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM