1. 程式人生 > >【轉載】程序設計過程中SQL語句Where 1=1的作用

【轉載】程序設計過程中SQL語句Where 1=1的作用

clas 代碼 查詢語句 讀者 完成 code esp asp.net 字段

在Asp.Net網站或者Java網站的程序設計的過程中,很多時候我們可以看到拼接SQL語句的寫法的時候都可以看到最前面有個Where 1=1這個條件,其實Where 1=1這是個恒等式,SQL語句寫成Where 1=1的形式可以更好的拼接查詢語句條件。

結論:Where 1=1為恒等式,拼接SQL語句使用Where 1=1這個語句段主要是為了後續更好的拼接成完成的SQL語句。

舉例,前臺頁面可能傳入參數Name和Code兩個參數值,都是對應SQL語句查詢條件,但這兩個查詢條件也可全為空,即不傳實際參數,在程序中我們時常會看到下面的寫法。

string  sql="Select *   FRom TableA Where 1=1";
if( string.IsNullOrWhiteSpace(Name))
{
   sql=sql+string.Format(" AND Name={0}",Name);
}
if( string.IsNullOrWhiteSpace(Code))
{
   sql=sql+string.Format(" AND Code={0}",Code);
}

使用了Where 1=1這個恒等式後,後續只需要判斷對應的屬性值是否為空,不為空直接加入對應的拼接SQL語句段。如果不加入Where 1=1這個條件,代碼可讀性就會變得更差,可能出現下列幾種情況,讀者可自行思考下。

(1)Name和Code的值都為空,則Sql語句是不能帶Where的,直接是:Select * FRom TableA

(2)如果Name、Code有一個為空,另一個不為空的時候,Sql語句是不會帶有And這個關鍵字,Sql最終語句要麽為Select * FRom TableA Where [email protected] 要麽為Select * FRom TableA Where [email protected];

(3)如果Name、Code都不為空的時候,語句中就含有AND這個關鍵字,但Name條件前不會有AND關鍵字。可以想象下如果有10個查詢條件,是不是還要判斷下那個查詢條件屬性是SQL語句中的第一個查詢字段。這樣的判斷就麻煩多了。

當然如果不用Where 1=1這種寫法,還有種稍微容易閱讀的方法可采用,就是單獨定義個字段sqlFilter用於查詢條件的拼接,最後判斷下sqlFilter是否為空,如果不為空,則截取掉該sqlFilter字符串的最前面幾個字符 AND之後得到最終查詢條件,拼接到查詢語句Sql中。

備註:原文轉載自博主個人技術站點IT技術小趣屋,原文鏈接程序設計過程中SQL語句Where 1=1的作用_IT技術小趣屋。

【轉載】程序設計過程中SQL語句Where 1=1的作用