============================================================
А что лучше использовать для формирования выборок?
Представления (VIEW) или Пользовательские функции (UDF)?
- удобнее
- практичнее
- производительнее
естественно речь идет не о выполнении каких-то серьезных операций (с IF-ELSE, WHILE, etc.), а просто о выборке...?
============================================================
И еще вопрос: насколько сильно тормозят обработку данных процедуры с EXISTS типа:
Код: Выделить всё
SET @IDClass = -1
IF EXISTS (
SELECT IDClass
FROM Classes
WHERE Classes.Name = @NameClass
)
SET @IDClass = (
SELECT IDClass
FROM Classes
WHERE Classes.Name = @NameClass
)
RETURN @IDClass
Здесь фактически два раза производится одна и таже выборка!
Нельзя ли вводить временные теременные типа как с DECLARE @IDClass, чтобы выборку можно было сделать один раз, а использовать потом много раз (например два раза как в приведенном примере)?
============================================================
и еще вопрос: а наскольно сильно тормозит работу использование вызовов одних UDF из других?
--
Best regards,
Иван mailto:shkmail@inbox.ru
(Добавление)
Параметры в UDF можно передавать - этим всё сказано- удобнее
Помоему вот так одним запросом:И еще вопрос: насколько сильно тормозят обработку данных процедуры с EXISTS типа:
Код: Выделить всё
SET @IDClass = (
SELECT isnull(IDClass,-1)
FROM Classes
WHERE Classes.Name = @NameClass)
RETURN @IDClass
Иван,
1) Если речь идет о просто выборке (без IF-ELSE, WHILE, etc.), то и использовать можно просто SELECT, если конечно есть возможность принять результат произвольного запроса. Если же результат принимается только стандартными средствами в фиксированные файловые структуры, тогда и возникает нужда запрос заворачивать в представление (VIEW), чтобы импортировать как таблицу в словарь...
2) Да, результат выборки может быть пустым (NULL). Разрулить эту ситуацию помогает функция ISNULL. Там, откуда вызывается UDF, код которой приведен в вопросе, можно скромно но со вкусом изобразить:
ISNULL((SELECT IDClass FROM Classes WHERE Classes.Name=@NameClass),-1)
3) Я бы порекомендовал обратить внимание еще на одну возможность получить выборку - при помощи stored procedures.
С уважением,
---
Oleg Fomin oleg@fomin.info
Написал: ClaList(2)