個人認為這篇文章寫的非常好,用例子把道理說的非常明白,所以轉了,希望對大家有所幫助。
1=1或者'a'='a'等等恒等式是t-sql中表達true的方法。因為在t-sql中沒有true這樣的關鍵字或值,所以需要借助這些恒等式來表達true的概念。
相對的,同樣可以使用1<>1或者1=2等來表達false。
在應用程式的安全性方面,使用這些式子是sql注入的基本原理,所以在拼接sql語句的時候要過濾各種各樣的敏感字元。
當然,這些式子也有有用的地方。今天看到乙個挺有用的小技巧:
從一張表查詢一些記錄,這些記錄是根據name, age, height, weight來進行過濾得。但是,具體過濾條件的個數是不確定的,比如有時候會是name和age的組合,有時候會是name, height和weight的組合,甚至有時候沒有任何條件。
怎麼辦?
一般性的拼接sql語句的方法會需要做乙個判斷:在第乙個條件前面加上where關鍵字。但是,這樣做會需要新增一組判斷的邏輯,以檢驗是否當前的條件是第乙個條件。
這裡,引進where 1=1就可以很好的省略掉上述的判斷邏輯。
怎麼做呢?**如下:
string query = "select * from userinfo where 1=1"
if (_name != string.empty)
if (_age != string.empty)
if (_height != string.empty)
if (_weight != string.empty)
當然,最好還是不要去拼接sql語句咯,直接使用ado的物件是最省事的方法。
SQL中where 1 1語句的作用
where 1 1有什麼用?在sql語言中,寫這麼一句話就跟沒寫一樣。但是這看似多餘的一條語句,卻有其獨特的用處。select from table1 where 1 1與select from table1完全沒有區別,甚至還有其他許多寫法,1 2,a a a b 其目的就只有乙個,where的條...
SQL 中 where 1 1 和 1 0的 作用
where 1 1有什麼用?在sql語言中,寫這麼一句話就跟沒寫一樣。select from table1 where 1 1與select from table1完全沒有區別,甚至還有其他許多寫法,1 2,a a a b 其目的就只有乙個,where的條件為永真,得到的結果就是未加約束條件的。在s...
sql中where 1 1或2的作用
where 後面表示過濾的條件,只有滿足條件的記錄才被選擇,因為條件 1 2 為假,所以整句話其實就是什麼都不選擇,比如我要建乙個和表a相同結構的表b 但我不要資料就可以 select into 表b from 表a where 1 2 這樣實現了拷貝乙個表結構的目的 如果條件是 1 1 就是選擇所...