Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 是SQL Server';这里需要再检查一遍吗?_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 是SQL Server';这里需要再检查一遍吗?

Sql server 是SQL Server';这里需要再检查一遍吗?,sql-server,sql-server-2008,Sql Server,Sql Server 2008,这个逻辑在触发器中 该值来自已删除或插入的行(无所谓) 2个问题: 我需要检查这两种情况吗?(我希望所有值都大于0,db中的值可以为空) SQL Server是否检查我编写的顺序中的表达式 1) 实际上,不是,因为如果@insertedValue为NULL,表达式@insertedValue>0将计算为false。(实际上,正如Martin Smith在他的评论中指出的那样,它将计算为一个特殊的值“未知”,当强制为布尔结果时,它自身将崩溃为false-例如:unknown和true=unknow

这个逻辑在触发器中

该值来自已删除或插入的行(无所谓)

2个问题:

  • 我需要检查这两种情况吗?(我希望所有值都大于0,db中的值可以为空)

  • SQL Server是否检查我编写的顺序中的表达式

  • 1) 实际上,不是,因为如果@insertedValue为NULL,表达式@insertedValue>0将计算为false。(实际上,正如Martin Smith在他的评论中指出的那样,它将计算为一个特殊的值“未知”,当强制为布尔结果时,它自身将崩溃为false-例如:
    unknown和true=unknown
    ,它被强制为false、
    unknown或true=true
    ),但您依赖于空值的比较行为。顺便说一句,单步等效方法为:

    IF @insertedValue IS NOT NULL AND @insertedValue >  0 
    
    IMHO,如果没有其他内容,为了清晰起见,最好还是坚持使用显式空检查

    2) 由于查询将在执行前进行优化,因此绝对不能保证执行顺序或
    运算符短路

    将二者结合起来-如果确实不需要双重检查,那么在执行之前可能会对其进行优化,但在我看来,如果您明确这一点,您的SQL代码将更易于维护。

    1)事实上,不是,因为如果@insertedValue为NULL,表达式@insertedValue>0将计算为false。(实际上,正如Martin Smith在他的评论中指出的那样,它将计算为一个特殊的值“未知”,当强制为布尔结果时,它自身将崩溃为false-例如:
    unknown和true=unknown
    ,它被强制为false、
    unknown或true=true
    ),但您依赖于空值的比较行为。顺便说一句,单步等效方法为:

    IF @insertedValue IS NOT NULL AND @insertedValue >  0 
    
    IMHO,如果没有其他内容,为了清晰起见,最好还是坚持使用显式空检查

    2) 由于查询将在执行前进行优化,因此绝对不能保证执行顺序或
    运算符短路

    将二者结合起来-如果确实不需要双重检查,那么在执行之前可能会对其进行优化,但在我看来,如果您明确这一点,您的SQL代码将更易于维护。

    您可以使用=>返回其参数中的第一个非空表达式。

    现在,您可以通过增加列限制使查询更加灵活,并且再次需要检查大于零的条件。这里需要注意的重要一点是,您可以选择检查多列中的值

    IF ISNULL(@insertedValue, 0) > 0
    
    您可以使用=>返回其参数中的第一个非空表达式。

    现在,您可以通过增加列限制使查询更加灵活,并且再次需要检查大于零的条件。这里需要注意的重要一点是,您可以选择检查多列中的值

    IF ISNULL(@insertedValue, 0) > 0
    

    依赖于空值的比较行为
    。。。比较能得出不同的结果吗?你能粘贴一个小例子吗?在这方面,使用>或运算符,你会让其他可能来维护你的代码的人挠头,不得不问同样的问题……
    @insertedValue>0
    计算结果为
    未知
    非假。SQL使用三值逻辑。+1尽管仍然不太正确
    unknown+true=unknown
    。3VL真值表。在where子句中,谓词的计算结果必须为
    true
    。在检查约束中,条件的计算结果不得为
    false
    (即为真或未知)多任务。。。你不讨厌它吗感谢
    依赖于空值的比较行为
    。。。比较能得出不同的结果吗?你能粘贴一个小例子吗?在这方面,使用>或运算符,你会让其他可能来维护你的代码的人挠头,不得不问同样的问题……
    @insertedValue>0
    计算结果为
    未知
    非假。SQL使用三值逻辑。+1尽管仍然不太正确
    unknown+true=unknown
    。3VL真值表。在where子句中,谓词的计算结果必须为
    true
    。在检查约束中,条件的计算结果不得为
    false
    (即为真或未知)多任务。。。你不讨厌它吗谢谢