On Wed, 06 Dec 2006 21:38:14 +0300, sasha <[EMAIL PROTECTED]> wrote:
> Этот код говорит о том что вам не доводилось озадачиваться вопросами
> оптимизации. Иными словами
> 1) это ужасное решение с точки зрения оптимизатора
Я этим постоянно занимаюсь.
И никогда в одну процедуру не буду смешивать выборки 1 записи и выборки группы
записей.
> 2) а что если задача посложнее. Вот код, над которым я мыслю в данный
> момент (недописанный)
Тут не до конца. Видимо, потом идёт "FOR SELECT * FROM @CUR"?
Дык вот.
Я бы сделал вызовами процедур, отдельными FOR SELECT из процедуры на каждое
условие.
Ну раз ты так хочешь "один-в-один", то и так тоже можно:
IF (WBSElementTypeId = 1) THEN BEGIN
IF (BrowsingMode = 0)
SQL = 'SELECT Id FROM TasksData WHERE VersionId = ' || VersionId || ' AND
ParentTaskId = ' || WBSElementId;
ELSE
SQL = 'SELECT Id FROM PhasesData WHERE ProjectId = ' || WBSElementId;
END
ELSE IF(WBSElementTypeId IN (2, 3, 4)) BEGIN
SQL = 'SELECT Id FROM TasksData WHERE VersionId = ' || VersionId || ' AND
WBSElementId = ' || WBSElementId;
END
ELSE IF(WBSElementTypeId = 5) BEGIN
IF EXISTS(SELECT Id FROM PhasesData WHERE ParentPhaseId = WBSElementId)
SQL = 'SELECT Id FROM PhasesData WHERE ParentPhaseId = ' || WBSElementId;
ELSE
SQL = 'SELECT Id FROM TasksData T WHERE VersionId = ' || VersionId || '
AND PhaseId = ' || WBSElementId || ' AND NOT EXISTS(SELECT 1 FROM TasksData PT
WHERE PT.Id = T.ParentTaskId AND PT.PhaseId = ' || WBSElementId || ')';
END
FOR EXECUTE STATEMENT :SQL INTO...
--
Сергей Смирнов.