Sql server TSQL中的IF条件表达式求值

Sql server TSQL中的IF条件表达式求值,sql-server,tsql,if-statement,expression,Sql Server,Tsql,If Statement,Expression,在像C#这样的编程语言中,java如果一个条件有多个带有AND(&&)运算符的表达式,那么只有当第一个表达式为true时,才会计算第二个表达式 那么在TSQL中呢?具体来说,这是Microsoft Sql server中存储过程中的一个条件 IF (exprA AND exprB) 在上述情况下,如果exprA为false,那么exprB是否会被计算?如果第一个表达式为false,您不能依靠SQL Server不计算第二个表达式。参见我对Martin在其评论中链接的问题的回答。案例语句似乎允许

在像C#这样的编程语言中,java如果一个条件有多个带有AND(&&)运算符的表达式,那么只有当第一个表达式为true时,才会计算第二个表达式

那么在TSQL中呢?具体来说,这是Microsoft Sql server中存储过程中的一个条件

IF (exprA AND exprB)

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

如果第一个表达式为false,您不能依靠SQL Server不计算第二个表达式。参见我对Martin在其评论中链接的问题的回答。

案例语句似乎允许短路,如下例所示:

-- 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

正如其他人所指出的,这取决于你的假设条件是什么。但是,如果只使用简单的表达式,它将短路。运行以下命令,您将看到第二个表达式中从未出现过被零除的错误:

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

“视情况而定”。如果它包含
EXISTS
子查询,那么几乎总是不会发生短路。你永远不能指望它发生。您可以嵌套
CASE
表达式,也可以嵌套
IF
表达式来保证它。如果有人想看一些额外的案例!我认为你是对的,而不是依赖它,我应该使用嵌套的if或case。谢谢你提供的信息。
    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