我會寫這樣的事:
create procedure usp_search (
@param1 varchar(50) = null
,@param2 carchar(50) = null
) as
begin
select field1
,field2
,field3
,fieldN
from table t with(nolock)
where ((@param1 is null) or (t.fieldX == @param1))
and ((@param2 is null) or (t.fieldY == @param2))
end
那麼你的客戶你不喜歡沿着這些線路......這樣你的搜索查詢可以檢索過濾或未經過濾的結果
//code
var connection = new SqlConnection("connection_string");
var command = new SqlCommand();
command.Connection = connection;
command.CommandText = "usp_Search";
command.CommandType = CommandType.StoredProcedure;
if((string.IsNullOrEmpty(stringVariable1)) || (stringVariable2.ToLower().Equals("any"))) {
command.Parameters.Add("@param1", SqlType.VarChar, 50).Value = DBNull.Value;
} else {
command.Parameters.Add("@param1", SqlType.VarChar, 50).Value = stringVariable1;
}
if((string.IsNullOrEmpty(stringVariable2)) || (stringVariable2.ToLower().Equals("any"))) {
command.Parameters.Add("@param2", SqlType.VarChar, 50).Value = DBNull.Value;
} else {
command.Parameters.Add("@param2", SqlType.VarChar, 50).Value = stringVariable2;
}
// code
東西..當然,你將不得不注意這種類型的查詢的一些陷阱
編輯:同樣的事情onl y在C#代碼將是這樣的:
var sb = new StringBuilder();
sb.Append("select field1 ,field2, field3, fieldN ");
sb.Append("from table t with(nolock) ");
sb.Append("where ((@param1 is null) or (t.fieldX == @param1))");
sb.Append("and ((@param2 is null) or (t.fieldY == @param2))");
var connection = new SqlConnection("connection_string");
var command = new SqlCommand();
command.Connection = connection;
command.CommandText = sb.ToString();
command.CommandType = CommandType.Text;
if((string.IsNullOrEmpty(stringVariable1)) || (stringVariable2.ToLower().Equals("any"))) {
command.Parameters.Add("@param1", SqlType.VarChar, 50).Value = DBNull.Value;
} else {
command.Parameters.Add("@param1", SqlType.VarChar, 50).Value = stringVariable1;
}
if((string.IsNullOrEmpty(stringVariable2)) || (stringVariable2.ToLower().Equals("any"))) {
command.Parameters.Add("@param2", SqlType.VarChar, 50).Value = DBNull.Value;
} else {
command.Parameters.Add("@param2", SqlType.VarChar, 50).Value = stringVariable2;
}
如果你想讓數據庫以及時的方式返回結果,在索引使用中有很多注意事項。你的旅程應該開始閱讀:[由Erland Sommarskog在T-SQL中的動態搜索條件](http://www.sommarskog.se/dyn-search.html)。這是一篇SQL Server文章(您似乎在「Microsoft」環境中)。如果您正在追求「通用」SQL來處理任何數據庫,那麼使用「通用」SQL以及像這些搜索一樣可以在您的表增長時獲得良好性能的好運氣。在不知道數據庫的情況下很難調整/優化查詢。 – 2012-04-19 17:30:49