Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Фильтрация по результату функции  [new]
relief
Member

Откуда:
Сообщений: 1197
В селекте есть значение высчитыываемое функцией.
Как вернуть в селекте записи у которых функция удовлетворяет некому условию?
27 фев 12, 10:06    [12155056]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация по результату функции  [new]
Glory
Member

Откуда:
Сообщений: 104751
использовать where не пробовали ?
27 фев 12, 10:08    [12155066]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация по результату функции  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
relief
В селекте есть значение высчитыываемое функцией.
Как вернуть в селекте записи у которых функция удовлетворяет некому условию?
Что такое "значение высчитыываемое функцией"?
Что за функция-то (их три типа, вообще-то)?
27 фев 12, 10:10    [12155080]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация по результату функции  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
использовать where не пробовали ?


пробовал


fGetBalance() as balance
where balance > 0

Invalid column name


конечно вы скажете можно использовать
where fGetBalance()   > 0


а не будет 2 раза вызываться функция?
27 фев 12, 10:13    [12155102]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация по результату функции  [new]
Glory
Member

Откуда:
Сообщений: 104751
relief
пробовал

А где тут функция то where ? Там у вас какой то алиас

relief
а не будет 2 раза вызываться функция?

Для выяснения этого есть план и Профайлер
27 фев 12, 10:17    [12155123]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация по результату функции  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
relief,

значит, скалярная функция-то? Она хоть детерминированная?
Лучше переделать её в inline табличную функцию.
27 фев 12, 10:17    [12155131]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация по результату функции  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
relief
fGetBalance() as balance
where balance > 0


Invalid column name



конечно вы скажете можно использовать
where fGetBalance()   > 0



а не будет 2 раза вызываться функция?
Вот так точно не будет:

select * 
from (select fGetBalance() as balance) t
where balance > 0
27 фев 12, 10:52    [12155291]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация по результату функции  [new]
relief
Member

Откуда:
Сообщений: 1197
iap
relief,

значит, скалярная функция-то? Она хоть детерминированная?
Лучше переделать её в inline табличную функцию.


да. функция скалярная.
но вот потребовалось возвращать кроме баланса, еще и кол-во его покупок.

Как можно в SELECT вызвать функцию, которая вернет 2 скалярных значения по одному параметру?
27 фев 12, 12:05    [12155790]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация по результату функции  [new]
Glory
Member

Откуда:
Сообщений: 104751
relief
Как можно в SELECT вызвать функцию, которая вернет 2 скалярных значения по одному параметру?

Никак. Потому что нельзя создать скалярную функцию, возвращающую 2 значения.

ЗЫ
Прочитайте в энциклопедии определение скаляр/скалярная
27 фев 12, 12:12    [12155840]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация по результату функции  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
relief,

говорю же, переделайте функцию в табличную.
Ну, например, пусть ввозвращает одну строку из двух полей.
Скалярная UDF обычно всё только портит.
27 фев 12, 12:53    [12156232]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить