SQL中的IF条件表达式求值

时间:2011-04-12 14:18:46

标签: sql-server tsql if-statement expression

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

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

IF (exprA AND exprB)

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

4 个答案:

答案 0 :(得分:2)

如果第一个表达式为false,则不能依赖SQL Server来评估第二个表达式。请参阅我在评论中与Martin联系的question的答案。

答案 1 :(得分:1)

正如其他人所说,这取决于你的IF条件。但是,如果您只使用简单表达式,它将会短路。运行以下命令,您将看到第二个表达式中的除零错误永远不会发生:

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

答案 2 :(得分: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

答案 3 :(得分: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