让我们假设有一个表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
为空时,是否有一种干净的方法可以使比较工作不会使查询字符串不同?
答案 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评论后更新。