select * from t where (isnull(lsname,'') = '珠三角环一' or lsname ='') 
            and (isnull(lnname,'') ='深圳' or lnname ='')

解决方案 »

  1.   

    我不是不想加跨好,只是加了跨好后企业管理器会复制我的句子
    比如说我把踏雪无痕的句子
    select * from t where (isnull(lsname,'') = '珠三角环一' or lsname ='') 
                and (isnull(lnname,'') ='深圳' or lnname ='')
    拷贝到企业管理器里,就会变成下面的句子
    SELECT *
    FROM t
    WHERE (ISNULL(lsname, '') = '珠三角环一') AND (ISNULL(lnname, '') = '深圳') OR
          (lnname = '') AND (ISNULL(lsname, '') = '珠三角环一') OR
          (lsname = '') AND (ISNULL(lnname, '') = '深圳') OR
          (lnname = '') AND (lsname = '')自动复制了一倍
      

  2.   

    or 和 and 是有执行优先级的
    好象是先and后or
      

  3.   

    运算符有下面这些优先等级。在较低等级的运算符之前先对较高等级的运算符进行求值。 +(正)、-(负)、~(按位 NOT)
    *(乘)、/(除)、%(模)
    +(加)、(+ 串联)、-(减)
    =,  >,  <,  >=,  <=,  <>,  !=,  !>,  !< 比较运算符
    ^(位异或)、&(位与)、|(位或)
    NOT
    AND
    ALL、ANY、BETWEEN、IN、LIKE、OR、SOME
    =(赋值) 
    当一个表达式中的两个运算符有相同的运算符优先等级时,基于它们在表达式中的位置来对其从左到右进行求值。例如,在下面的示例中,在 SET 语句中使用的表达式中,在加号运算符之前先对减号运算符进行求值。
      

  4.   

    i knew that, but even i () the or 
    i still met the problem