Where子句未正确设置

时间:2017-02-06 08:06:44

标签: sql-server

我有一个很长的查询,其中一部分基于@Amount参数。 如果@Amount为空,那么任何金额的结果都应该出现,否则只会导致其中一个金额大于@Amount参数的结果。

@Amount varchar(20)= NULL

SELECT .....
Format(T1.Amount,'c','en-us') as Amount1, format(T2.Amount, 'c', 'en-us') as Amount2
FROM Table1
WHERE  .....
and ((@Amount is  null) or (Cast(T1.Amount as varchar)>= @Amount) or (Cast(T2.Amount as varchar)>= @Amount))

这不能正常工作:

  • 如果@Amount参数不为空,则出现的结果金额小于@Amount参数中指定的金额。
  • 如果@Amount参数为null,则不会显示所有结果。

我不确定我做错了什么,任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

试试这个

WHERE  .....
AND ( 
      ( T1.Amount>= CAST(@Amount AS INT) 
        OR T2.Amount >= CAST(@Amount AS INT)  
      ) 
     AND @Amount IS NOT NULL)
    )

如果@Amount为NULL,则无需按数量进行过滤,因此请从WHERE子句中删除(@Amount is null)。 仅当@Amount没有NULL值时才会进行过滤。

修改

如果T1.Amount和T2.Amount具有数值数据类型(INT,Decimal等),则通过转换为VARCHAR进行比较是不正确的。 Varchar 值1000小于900。