【转载】程序设计过程中SQL语句Where 1=1的作用
在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 name=@name 要么为select * from tablea where code=@code;
(3)如果name、code都不为空的时候,语句中就含有and这个关键字,但name条件前不会有and关键字。可以想象下如果有10个查询条件,是不是还要判断下那个查询条件属性是sql语句中的第一个查询字段。这样的判断就麻烦多了。
当然如果不用where 1=1这种写法,还有种稍微容易阅读的方法可采用,就是单独定义个字段sqlfilter用于查询条件的拼接,最后判断下sqlfilter是否为空,如果不为空,则截取掉该sqlfilter字符串的最前面几个字符 and之后得到最终查询条件,拼接到查询语句sql中。
备注:原文转载自博主个人技术站点it技术小趣屋,原文链接程序设计过程中sql语句where 1=1的作用_it技术小趣屋。
上一篇: Web.Config配置