為什么SQL語句加 1=1


是為了鏈接下面的查詢條件條件,也或者是替換沒有查詢條件的語句。
比如:要把檢索條件作為一個參數傳遞給SQL,那么,當這個檢索語句不存在的話就可以給它賦值為1=1.這樣就避免了SQL出錯,也就可以把加條件的SQL和不加條件的SQL合二為一。

這個就是為了方便sql條件的拼接,在“where”和“and”的地方方便處理(這里以“and”關鍵字舉例)

 


假如有如下5列條件可以任意組合:
a='a'; b='b'; c='c'; d='d'; e='e'

第一種方案:
如果初始sql為: select * from t1

我們在生成最終的sql時就需要分情況判斷
1。一個條件也不帶,sql保持不變
2。如果至少有一個條件,我們就需要在sql后面加一個“where”來連接條件
3。如果至少有二個條件,“where”后面的第一個條件前面是不需要“and”的,因為5列條件可以任意組合,我們就需要判斷哪一列會是緊跟在“where”后面的,這時候又需要代碼來判斷

第二種方案:
如果初始sql是這樣:select * from t1 where 1=1

現在對於第一種方案里面的任何一種情況,我們都只需要直接在sql后面加上“and + 對應的條件”就行了,不用另外寫代碼判斷
比如:
sql = sql + ' and ' + a='a' ---> select * from t1 where 1=1 and a='a'
sql = sql + ' and ' + b='b' ---> select * from t1 where 1=1 and b='b'
sql = sql + ' and ' + c='c' + " and " + d='d' ---> select * from t1 where 1=1 and c='c' and d='d'

特別是當條件很多,程序中又能循環動態的添加條件的時候很方便
下面用偽代碼舉例:
sql = select * from t1 where 1=1;
for (int i = 0; i < column.Count; i++)
{
sql = sql + " and " + column[i].Name + "='" + column[i].Value + "'";
}
最終生成的sql就類似如下的:
select * from t1 where 1=1 and a='a' and b='b' and c='c' and d='d' and e='e'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM