在TSQL中进行IF条件表达式评估

3
在像C#、Java这样的编程语言中,如果一个条件有多个使用AND(&&)运算符的表达式,则只有在第一个表达式为true时才会评估第二个表达式。
那么,在TSQL中呢?具体来说,这是Microsoft Sql Server中存储过程中的一个条件。
IF (exprA AND exprB)

在上述情况下,如果exprA为false,那么exprB是否会被评估?

5
“这要看情况。”如果包含“EXISTS”子查询,那么短路计算几乎总是不会发生。你不能依赖它的发生。你可以嵌套“CASE”表达式或嵌套“IF”表达式来保证它。我目前在一个类似的问题上拥有一个悬赏,如果有人想看一些额外的情况! - Martin Smith
4个回答

2

我认为你是正确的,不应该依赖它,而是应该使用嵌套的if或case。 谢谢你的信息。 - JPReddy

1

正如其他人所指出的那样,这取决于您的 IF 条件是什么。但是,如果您只使用简单的表达式,它将会短路。运行以下代码,您会发现第二个表达式中的除零错误从未发生:

IF (1 = 0 AND (1/0) = 0)
BEGIN
    PRINT 'test1'
END
ELSE
BEGIN
    PRINT 'test2'   
END

0

CASE语句似乎允许短路,如下面的示例所示:

-- Conditional Query
select case when  1>0 and 1/0>0 then 1 else 0 end

-- Short Circuited Conditional Query
select case when -1>0 and 1/0>0 then 1 else 0 end

0
    create proc ABCDemo1
    (
    @Name varchar(50),
    @date varchar(50)
    )
 as begin
    if(@Name!='' and @date='')
    begin
       select  * from Table1 where condition1
    end
    else if(@Name='' and @date!='')
    begin
       select * from Table2 where condition2
    end
    else if(@Name!='' and @date!='')
    begin
        select * from Table3 where condition3
    end
 end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接