Оценка выражения условия IF в TSQL - PullRequest
3 голосов
/ 12 апреля 2011

В языке программирования, таком как C #, java, если условие имеет несколько выражений с оператором AND (&&), то второе выражение вычисляется только в том случае, если первое выражение истинно.

А как насчет TSQL? В частности, это условие в хранимой процедуре на сервере Microsoft Sql.

IF (exprA AND exprB)

В вышеприведенном условии, если exprA равно false, будет ли вычисляться exprB или нет?

Ответы [ 4 ]

2 голосов
/ 12 апреля 2011

Нельзя полагаться на то, что SQL Server не оценивает второе выражение, если первое является ложным.См. Мой ответ на вопрос , связанный Мартином в его комментарии.

1 голос
/ 13 апреля 2011

Как уже отмечали другие, это зависит от ваших условий IF. Однако, если вы используете только простые выражения, это приведет к короткому замыканию. Запустите следующее, и вы увидите, что ошибка деления на ноль во втором выражении никогда не возникает:

IF (1 = 0 AND (1/0) = 0)
BEGIN
    PRINT 'test1'
END
ELSE
BEGIN
    PRINT 'test2'   
END
0 голосов
/ 01 октября 2014
    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
0 голосов
/ 13 апреля 2011

Кажется, что оператор 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...