如何在参数化查询中检查T-SQL中的值是否为空?

时间:2011-02-10 16:54:30

标签: c# sql-server tsql sql-server-2008 syntax

让我们假设有一个表Product,其中列ProductId(smallint),Title(可空nvarchar(100))和Price(钱)。标题可以null

有一个查询必须返回与特定标题和特定价格匹配的产品:

using (SqlCommand getProducts = new SqlCommand("select ProductId from Product where Title = @title and Price = @price", sqlConnection))
{
    getProducts.Parameters.AddWithValue("@title", title);
    getProducts.Parameters.AddWithValue("@price", price);
}

执行以下代码时title设置为null(或者也可能是空字符串),对于SQL Server,比较将是:

[...] where Title = NULL and Price = 123

将返回一个空集,因为正确的语法是:

[...] where Title is NULL and Price = 123

我可以根据标题的空检查更改查询字符串,但它将无法维护。

Title为空时,是否有一种干净的方法可以使比较工作不会使查询字符串不同?

2 个答案:

答案 0 :(得分:2)

[...] WHERE COALESCE(Title,'') = COALESCE(@Title,'') AND Price = 123

答案 1 :(得分:1)

您可以像这样使用IsNull()......

using (SqlCommand getProducts = new SqlCommand("select ProductId from Product where IsNull(Title, '') = IsNull(@title, '') and Price = @price", sqlConnection))

如果标题为null,则将使用空字符串进行比较而不是null。

[edit]在下面的a1ex07评论后更新。