1: where DEP = NULL 应改为 where DEP is null
2:  and (0<>0) 相当于 and 1=2 即条件不可能成立,其实就是不查任何资料
   Select * from DEPT Where DEP=NULL and (0 <> 0)
   相当于 select top 0 * from DEPT3: and (1=1) 跟不加是一样的,即条件永远成立,其实就是只按前面的条件来查。SELECT Count(*) From VDTL VDTL ,VHED VHED Where  (VDTL.Acc_No >= '1001')  And  (VDTL.Acc_No <= '1131')  And  (VHED.MAK_DAT >= '10/01/2003')  And  (VHED.MAK_DAT <= '10/31/2003')  And ( VDTL.MAK_NO = VHED.MAK_NO )  and(1=1)
相当于
SELECT Count(*) From VDTL VDTL ,VHED VHED Where  (VDTL.Acc_No >= '1001')  And  (VDTL.Acc_No <= '1131')  And  (VHED.MAK_DAT >= '10/01/2003')  And  (VHED.MAK_DAT <= '10/31/2003')  And ( VDTL.MAK_NO = VHED.MAK_NO )  4:如上写法主要是为了与前台查询条件配合使用。

解决方案 »

  1.   

    楼上说的非常对,0<>0和1=1只是为了占用一个位置,返回一个真值或假值,因为sql server 中没有布尔类型.
      

  2.   

    and (0 <> 0)
    意味着0不等于0,<>是不等于的意思,0不等于0它的条件是永远不成立的
    后面的1=1那就是永真条件
      

  3.   

    这是一种技巧来的
    如果你的sql语句是动态生成的

    "select * from dbtable where 1=1 " + ls_condition 防止 ls_condition   为空字符串 ,sql 语句产生语法错误!