where 1=1始终为true,在构造动态sql语句时,能够保证查询语句恒正确。
where 1=0; 这个条件始终为false,结果不会返回任何数据,只有表结构,可用于快速建表。
动态sql语句的一些问题
string MySqlStr="select * from table where";
if(Age.Text.Lenght>0)
{
MySqlStr=MySqlStr+“Age="+"'Age.Text'";
}
if(Address.Text.Lenght>0)
{
MySqlStr=MySqlStr+"and Address="+"'Address.Text'";
}
如果两个if语句均不成立,那么MySqlStr动态构造语句就变成了:
MySqlStr=”select * from table where”
这是一条错误的语句,不能被执行,会报错,这并不是一种好的编码方式,不够鲁棒。
使用where 1=1语句后
string MySqlStr="select * from table where 1=1";
if(Age.Text.Lenght>0)
{
MySqlStr=MySqlStr+“and Age="+"'Age.Text'";
}
if(Address.Text.Lenght>0)
{
MySqlStr=MySqlStr+"and Address="+"'Address.Text'";
}
若两个if不成立,MySqlStr语句就变成了:
MySqlStr="select from table where 1=1;
该语句语法正确,它的作用相当于:MySqlStr=”select * from table;,被执行后,返回表中所有数据。意思就是,用户在多条件查询时,不输入任何条件,就会返回表中所有数据。
where 0=1语句
where 1=0; 这个条件始终为false,结果不会返回任何数据,只有表结构,可用于快速建表
SELECT * FROM strName WHERE 1 = 0; 该select语句主要用于读取表的结构而不考虑表中的数据,这样节省了内存,因为可以不用保存结果集。
create table newtable as select * from oldtable where 1=0; 创建一个新表,而新表的结构与查询的表的结构是一样的。