【转载】程序设计过程中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技术小趣屋。
博主个人技术交流群:960640092,博主微信公众号如下:
最新文章
- 一张图理解prototype、proto和constructor的三角关系
- 使用vs2010创建MFC C++ Ribbon程序
- 使用Spark分析拉勾网招聘信息(二): 获取数据
- 0c-41-ARC使用特点及注意事项
- 转:Apache和Nginx运行原理解析
- ReiserFS与EXT3的比较
- kafka 的 createDirectStream
- View绘制流程
- Math对象中比较常用的计算数学相关的三个方法
- 第31月第17天 resolveInstanceMethod
- 学习笔记第六课 VB程序
- $(function() {....}) ,(function($){...})(jQuery)
- 树状数组 || 线段树 || Luogu P5200 [USACO19JAN]Sleepy Cow Sorting
- 4、订单详情 /items/order/detail?orderNo=201903251750380001
- c++11の异步方法 及线程间通信
- pycharm如何设置python版本、设置国内pip镜像、添加第三方类库
- idea 设置字体
- 自动化工具-jenkins
- (一)在Lingo中使用集合
- 深入浅出 妙用Javascript中apply、call、bind【转】
热门文章
- win10不能将文件拖到另外一个程序中去的解决办法
- win10网上邻居看不到别的共享电脑怎么样办
- Qt编写自定义控件71-圆弧进度条
- ORA-02287: sequence number not allowed here问题的解决
- 报错:java.lang.ClassNotFoundException: org.codehaus.jackson.map.JsonMappingException
- kubectl exec 执行 容器命令
- MangoDB
- Ubuntu 18.04 使用标准Ubuntu 仓库进行自动化安装NVIDIA驱动
- matlab中执行mex文件时提示GLIBCXX not found
- 将oracle关键字作为字段名