datetime参数为null的附近语法不正确



我有一个查询,它具有VerifiedDate,即DateTime。这可以是带值的,也可以是null。我添加了如下所示的参数。然而,当试图添加到我的查询where子句时,我得到了异常。

Parameters.Add(Context.CreateParameter("@VerifiedDate", 30, (object) Car.VerifiedDate ?? DBNull.Value, DbType.DateTime));
queryWhereClause = " AND VerifiedDate=@VerifiedDate";

例外:

System.Data.SqlClient.SqlException: 'Incorrect syntax near '='.'

最终,SQL Server(在符合ANSI的模式下(需要不同的语法来进行null匹配。坦率地说,在你的情况下,我只会做:

if (Car.VerifiedDate.HasValue)
{
Parameters.Add(Context.CreateParameter("@VerifiedDate", 30, Car.VerifiedDate.Value, DbType.DateTime));
queryWhereClause = " AND VerifiedDate=@VerifiedDate";
}
else
{
queryWhereClause = " AND VerifiedDate IS NULL";
}

但是,您也可以执行以下操作:

AND (VerifiedDate=@VerifiedDate OR (VerifiedDate IS NULL AND @VerifiedDate IS NULL))

服务器通常会更好地使用第一种方法,因为它的条件和分支更少,而且如果存在索引,它可以最有效地使用索引。

相关内容

最新更新