IF @insertedValue IS NOT NULL AND @insertedValue > 0
Run Code Online (Sandbox Code Playgroud)
这个逻辑处于触发状态.
该值来自已删除或插入的行(无关紧要).
2个问题:
我需要检查这两个条件吗?(我希望所有值> 0,db中的值可以为空)
SQL Server是否按照我编写的顺序检查表达式?
1)实际上,不,因为如果@insertedValue为NULL,则表达式@insertedValue> 0将变为false.(实际上,正如马丁史密斯在他的评论中指出的那样,它会评估一个特殊的值"未知",当它被迫自己的布尔结果崩溃为假 - 例子:unknown AND true = unknown
这被迫为假,unknown OR true = true
.)但是你'依赖于NULL值的比较行为.单步等效方法BTW将是:
IF ISNULL(@insertedValue, 0) > 0
Run Code Online (Sandbox Code Playgroud)
恕我直言,如果没有别的,你最好坚持使用明确的NULL检查.
2)由于查询将在执行前进行优化,因此绝对不能保证AND
操作员的执行顺序或短路.
将两者结合起来 - 如果双重检查确实是不必要的,那么无论如何它都可能在执行之前进行优化,但是如果你明确地说明你的SQL代码在我的视图中将更易于维护.
归档时间: |
|
查看次数: |
70 次 |
最近记录: |