If b = 1 or c = dbo.Calc_f(x)... Если b = 1 будет ли вычислено второе выражение?

_Промешан_
Дата: 18.02.2013 13:42:15
Сабж.
sql server 2008.
Glory
Дата: 18.02.2013 13:43:45
Это уж как оптимизатор решит. Его решение можно увидеть в плане выполнения
Гость333
Дата: 18.02.2013 13:44:21
_Промешан_,

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.02.2013 14:01:12
Glory,

Да уж. Значит придется вводить доп оператор.
iap
Дата: 18.02.2013 14:33:18
_Промешан_
Glory,

Да уж. Значит придется вводить доп оператор.
С помрощью CASE можно задать определённый порядок вычислений логических выражений
_Промешан_
Дата: 18.02.2013 15:38:40
iap
_Промешан_
Glory,

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


case разве полноценно заменяет if?
iap
Дата: 18.02.2013 15:55:11
_Промешан_
iap
пропущено...
С помрощью CASE можно задать определённый порядок вычислений логических выражений


case разве полноценно заменяет if?
Нет, конечно.
Он должен быть в SELECTе и возвращать скалярное значение.
А его можно проверять в IFе.
iap
Дата: 18.02.2013 15:59:55
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 ...
iap
Дата: 18.02.2013 16:02:19
iap
Кажется, можно и без SELECTа:
и, разумеется, без ELSE
IF CASE WHEN b=1 THEN 1 WHEN c=dbo.Calc_f(x) THEN 1 END=1 ...
ELSE ...
ambarka_max
Дата: 18.02.2013 16:45:48
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?