Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 If b = 1 or c = dbo.Calc_f(x)... Если b = 1 будет ли вычислено второе выражение?  [new]
_Промешан_
Member

Откуда:
Сообщений: 970
Сабж.
sql server 2008.
18 фев 13, 13:42    [13942491]     Ответить | Цитировать Сообщить модератору
 Re: If b = 1 or c = dbo.Calc_f(x)... Если b = 1 будет ли вычислено второе выражение?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Это уж как оптимизатор решит. Его решение можно увидеть в плане выполнения
18 фев 13, 13:43    [13942509]     Ответить | Цитировать Сообщить модератору
 Re: If b = 1 or c = dbo.Calc_f(x)... Если b = 1 будет ли вычислено второе выражение?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
_Промешан_,

BOL
The order of precedence for the logical operators is NOT (highest), followed by AND, followed by OR. Parentheses can be used to override this precedence in a search condition. The order of evaluation of logical operators can vary depending on choices made by the query optimizer.
18 фев 13, 13:44    [13942514]     Ответить | Цитировать Сообщить модератору
 Re: If b = 1 or c = dbo.Calc_f(x)... Если b = 1 будет ли вычислено второе выражение?  [new]
_Промешан_
Member

Откуда:
Сообщений: 970
Glory,

Да уж. Значит придется вводить доп оператор.
18 фев 13, 14:01    [13942684]     Ответить | Цитировать Сообщить модератору
 Re: If b = 1 or c = dbo.Calc_f(x)... Если b = 1 будет ли вычислено второе выражение?  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
_Промешан_
Glory,

Да уж. Значит придется вводить доп оператор.
С помрощью CASE можно задать определённый порядок вычислений логических выражений
18 фев 13, 14:33    [13942959]     Ответить | Цитировать Сообщить модератору
 Re: If b = 1 or c = dbo.Calc_f(x)... Если b = 1 будет ли вычислено второе выражение?  [new]
_Промешан_
Member

Откуда:
Сообщений: 970
iap
_Промешан_
Glory,

Да уж. Значит придется вводить доп оператор.
С помрощью CASE можно задать определённый порядок вычислений логических выражений


case разве полноценно заменяет if?
18 фев 13, 15:38    [13943450]     Ответить | Цитировать Сообщить модератору
 Re: If b = 1 or c = dbo.Calc_f(x)... Если b = 1 будет ли вычислено второе выражение?  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
_Промешан_
iap
пропущено...
С помрощью CASE можно задать определённый порядок вычислений логических выражений


case разве полноценно заменяет if?
Нет, конечно.
Он должен быть в SELECTе и возвращать скалярное значение.
А его можно проверять в IFе.
18 фев 13, 15:55    [13943589]     Ответить | Цитировать Сообщить модератору
 Re: If b = 1 or c = dbo.Calc_f(x)... Если b = 1 будет ли вычислено второе выражение?  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
IF (SELECT CASE WHEN b=1 THEN 1 WHEN c=dbo.Calc_f(x) THEN 1 ELSE 0 END)=1 ...
ELSE ...
Кажется, можно и без SELECTа:
IF CASE WHEN b=1 THEN 1 WHEN c=dbo.Calc_f(x) THEN 1 ELSE 0 END=1 ...
ELSE ...
18 фев 13, 15:59    [13943614]     Ответить | Цитировать Сообщить модератору
 Re: If b = 1 or c = dbo.Calc_f(x)... Если b = 1 будет ли вычислено второе выражение?  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
iap
Кажется, можно и без SELECTа:
и, разумеется, без ELSE
IF CASE WHEN b=1 THEN 1 WHEN c=dbo.Calc_f(x) THEN 1 END=1 ...
ELSE ...
18 фев 13, 16:02    [13943625]     Ответить | Цитировать Сообщить модератору
 Re: If b = 1 or c = dbo.Calc_f(x)... Если b = 1 будет ли вычислено второе выражение?  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
iap
iap
Кажется, можно и без SELECTа:
и, разумеется, без ELSE
IF CASE WHEN b=1 THEN 1 WHEN c=dbo.Calc_f(x) THEN 1 END=1 ...
ELSE ...

Это для случая Условие1 OR Условие2, а как упорядочить обход для AND?
18 фев 13, 16:45    [13944003]     Ответить | Цитировать Сообщить модератору
 Re: If b = 1 or c = dbo.Calc_f(x)... Если b = 1 будет ли вычислено второе выражение?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
ambarka_max
как упорядочить обход для AND?

IF CASE WHEN b=1 THEN CASE WHEN c=dbo.Calc_f(x) THEN 1 END END = 1 ...
ELSE ...
18 фев 13, 16:51    [13944059]     Ответить | Цитировать Сообщить модератору
 Re: If b = 1 or c = dbo.Calc_f(x)... Если b = 1 будет ли вычислено второе выражение?  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
Гость333, точно, очевидно же)
18 фев 13, 16:53    [13944072]     Ответить | Цитировать Сообщить модератору
 Re: If b = 1 or c = dbo.Calc_f(x)... Если b = 1 будет ли вычислено второе выражение?  [new]
_Промешан_
Member

Откуда:
Сообщений: 970
Круто :) Запользуем :)
Спасибо
18 фев 13, 20:10    [13945078]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить