【问题标题】:SQL Select Query w/ Null Parameters带空参数的 SQL 选择查询
【发布时间】:2016-04-05 10:10:41
【问题描述】:

我在 2 个类似的 SQL 选择查询上出错,我的假设是我错误地使用了 NULL。有人看了看,告诉我哪里出错了。

string CountHolidayQuery = "SELECT StartDate, EndDate FROM [Holiday] WHERE PayrollNo = @PayrollNo AND Authorised IS NOT Null";

string CountRequestedQuery = "SELECT StartDate, EndDate FROM [Holiday] WHERE PayrollNo = @PayrollNo AND Authorised IS Null";

【问题讨论】:

  • 请不要这样编写内联 SQL,除非您意识到危险 - 请参阅 herehere。特别是如果您正在处理工资单数据...

标签: c# sql select


【解决方案1】:

Authorised = Null 无效,应为Authorised IS NullAuthorised IS NOT Null

【讨论】:

  • 已完成此操作,错误更改为 >System.Data.dll 中发生“System.Data.OleDb.OleDbException”类型的未处理异常附加信息:没有为一个或多个必需参数提供值。
  • 这是因为在您的Is Not Null 语句中,您输入了“Autorised”而不是“Authorised”
  • 谢谢 Alfie,真不敢相信我错过了拍打额头
【解决方案2】:

在 SQL 中,Null 并不像值一样被处理,实际上是一种特殊情况,其语法为 Is NullIs Not Null,例如

string CountHolidayQuery = "SELECT StartDate, EndDate FROM [Holiday] WHERE PayrollNo = @PayrollNo AND Autorised Is Not Null";

还有

string CountRequestedQuery = "SELECT StartDate, EndDate FROM [Holiday] WHERE PayrollNo = @PayrollNo AND Authorised Is Null";

在第一条语句中,Authorised 不应该为空,它输入错误,改为Autorised

【讨论】:

    【解决方案3】:

    应该是“IS NOTnull”,查询缺失IS

    SELECT StartDate, EndDate FROM [Holiday] WHERE PayrollNo = @PayrollNo AND Autorised IS NOT Null";
    

    第二个查询Authorised = Null 不是有效的sql 语法。

    【讨论】:

      【解决方案4】:

      我认为您缺少关键字 is

      所以语句如下:

      string CountHolidayQuery = "SELECT StartDate, EndDate FROM [Holiday] WHERE PayrollNo = @PayrollNo AND Autorised is NOT Null";
      

      【讨论】:

        猜你喜欢
        • 2021-11-24
        • 2021-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多