2011-02-10 59 views
0

讓我們想象有一個表Product與列ProductId(smallint),Title(可nvarlable nvarchar(100))和Price(貨幣)。標題可以是null如何在參數化查詢中檢查T-SQL中的值是否爲空?

有它必須返回和產品匹配到一個特定的標題和具體價格查詢:

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集執行以下代碼爲空(或者也可能爲空字符串),用於SQL Server中,比較將是:

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

它會返回一個空集,因爲正確的語法是:

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

我可以根據標題的空檢查更改查詢字符串,但它將不可維護。

Title爲空時,是否有一種乾淨的方式可以在不使查詢字符串不同的情況下進行比較工作?

回答

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

您可以使用ISNULL()這樣的...

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

如果標題爲空,則空字符串將被用於比較,而不是空。

更新後a1ex07的評論如下。

+0

在`@ title`爲null的情況下,如果`Title`s爲null,那麼是不是仍然會轉換爲`''= NULL`? – 2011-02-10 17:00:51