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...

-- 
Сергей Смирнов.

Ответить