已經有2年沒有用過where 1=1了,沒想到換了家公司後,又讓我看到了它。在網絡上面搜索了一下,發現沒有人提供一個比較好的方案來解決這一問題。很多人說可以讓數據庫的優化機制去處理,但是,我想對於大部分程序來說,數據庫都是負擔最重的那個。能夠自己去做優化的話,還是不要加重數據庫的負擔了吧。以下是兩種相似的方法來解決where 1=1 的問題,供大家參考。
方案一、在數據庫底層代碼中這樣處理:
if (!String.IsNullOrEmpty(strWhere)) { string str = strWhere.TrimStart();//去除前置空格 if (str.ToLower().IndexOf("and ") == 0)//若以and開頭則自動去除第一個and { strWhere = str.Substring(4);//若要保留前面一個空格,可以改為3 } strSql.Append(" where " + strWhere); }
方案二、在匹配條件傳入底層方法前,調用下面通用方法:
/// <summary> /// 驗證sql匹配條件是否正確(若以and開頭則自動去除) /// </summary> /// <param name="where">sql匹配條件</param> public static string CheckWhere(string where) { string str = where.TrimStart();//去除前置空格 if (str.ToLower().IndexOf("and ") == 0)//若以and開頭則自動去除第一個and { where = str.Substring(4);//若要保留前面一個空格,可以改為3 } return where; }
第一次發博客,有不足的地方,歡迎大家指正。
是為了鏈接下面的查詢條件條件,也或者是替換沒有查詢條件的語句。
比如:要把檢索條件作為一個參數傳遞給SQL,那麼,當這個檢索語句不存在的話就可以給它賦值為1=1.這樣就避免了SQL出錯,也就可以把加條件的SQL和不加條件的SQL合二為一。
1=1即為true,用在where條件或是循環語句,
select * from table where 1=1即查詢滿足1=1的所有數據,此時where條件相當於沒有生效
說白了這語句就是沒用,不過這種情況一般用於語句拼接,
在where 1=1 之後可以任意拼接條件,直接拼接and A=‘a’之類的
這樣省去了判斷前面是否有where關鍵字和是否需要加and關鍵字