在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,博主微信公众号如下:

最新文章

  1. 一张图理解prototype、proto和constructor的三角关系
  2. 使用vs2010创建MFC C++ Ribbon程序
  3. 使用Spark分析拉勾网招聘信息(二): 获取数据
  4. 0c-41-ARC使用特点及注意事项
  5. 转:Apache和Nginx运行原理解析
  6. ReiserFS与EXT3的比较
  7. kafka 的 createDirectStream
  8. View绘制流程
  9. Math对象中比较常用的计算数学相关的三个方法
  10. 第31月第17天 resolveInstanceMethod
  11. 学习笔记第六课 VB程序
  12. $(function() {....}) ,(function($){...})(jQuery)
  13. 树状数组 || 线段树 || Luogu P5200 [USACO19JAN]Sleepy Cow Sorting
  14. 4、订单详情 /items/order/detail?orderNo=201903251750380001
  15. c++11の异步方法 及线程间通信
  16. pycharm如何设置python版本、设置国内pip镜像、添加第三方类库
  17. idea 设置字体
  18. 自动化工具-jenkins
  19. (一)在Lingo中使用集合
  20. 深入浅出 妙用Javascript中apply、call、bind【转】

热门文章

  1. win10不能将文件拖到另外一个程序中去的解决办法
  2. win10网上邻居看不到别的共享电脑怎么样办
  3. Qt编写自定义控件71-圆弧进度条
  4. ORA-02287: sequence number not allowed here问题的解决
  5. 报错:java.lang.ClassNotFoundException: org.codehaus.jackson.map.JsonMappingException
  6. kubectl exec 执行 容器命令
  7. MangoDB
  8. Ubuntu 18.04 使用标准Ubuntu 仓库进行自动化安装NVIDIA驱动
  9. matlab中执行mex文件时提示GLIBCXX not found
  10. 将oracle关键字作为字段名