2009-01-16 85 views
1

我正在使用C#的ASP.NET Web表單搜索,例如帶有字段: - 姓名 - 水果查詢從空值數據庫的檢索

我想寫一個存儲過程可以搜索名稱或水果。如果我知道,這兩個本來價值,我想傳遞兩個參數到存儲過程和這樣寫:

Select * from myTable where name [email protected] and fruit = @fruit 

然而有時,名稱或水果可能是空的。無需單獨搜索水果和名稱。我將如何實現這一目標?

我不想創建一個動態查詢,如果可能的話,但如果這是唯一的方式我會怎麼寫它?

回答

4

您需要確保空字符串不作爲參數傳遞而不是null,但以下內容應該可以工作。不過,我很確定,如果用戶沒有輸入任何內容,表單值將爲空。

select * from myTable 
where (@name is null or name = @name) and (@fruit is null or fruit = @fruit) 
+0

當用戶傳遞null時,該解決方案將返回表中的所有記錄 – kristof 2009-01-16 11:51:46

1

可能:

SELECT * FROM myTable WHERE name Like '%' + @name AND fruit LIKE '%' + @fruit 
0
select * from myTable 
where 
    (name = @name and fruit = @fruit) 
    or (name = @name and @fruit is null) 
    or (fruit = @fruit and @name = is null) 
0
select * from myTable where name = isnull(@name, name) and fruit = isnull(@fruit, fruit) 

將返回整個表如果兩個@name和@fruit爲空。如果這是一個問題,最好給SP增加一些額外的邏輯。