请说明该SQL语句如何选择所有column1
值。
所以我有参数值A,B和*
如果我通过了,@brand = '*'
则此语句返回中的所有值column1
:
SELECT *
FROM TABLE
WHERE (column1 = @brand OR @brand = '*')
我在想,什么时候@brand = '*'
将其赋@brand
为TRUE
,所以incolumn1
中将是什么true
,所以这就是为什么它返回in中的所有值的原因。column1
如果我通过了,A
那么它将仅返回A
值,如果是,B
则返回B
值。
您的假设是正确的。它WHERE
根据最简单的路径顺序评估语句中的子句。
因此,由于存在一个OR
,因此它首先对@brand ='*'
子句求值;如果产生TRUE
,则该WHERE
子句满足,并且不进行进一步的比较。
如果产生FALSE
,则对表达式中的另一个子句求值column1 = @brand
。
但是,我应该注意,这不是在SQL中执行此操作的正确方法,因为SQL Server不能保证短路或逻辑子句的执行顺序。在您的情况下,它只是以这种方式起作用,但不能保证。您应该将WHERE
子句更改为如下形式:
((@brand = '*') OR (@brand <> '*' AND column1 = @brand))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句