Row_Number в триггере SQL - PullRequest
       14

Row_Number в триггере SQL

0 голосов
/ 22 апреля 2020

Я ищу помощь по использованию Row_Number в триггере.

Я хотел бы создать триггер, который заполняет таблицу расписаний набором заданий и дней по умолчанию для выполнения задачи. Триггер активируется, когда новый проект добавляется в таблицу ProjectDetails (создается идентификатор проекта), а задачи / дни по умолчанию сохраняются в таблице значений по умолчанию.

Таблица по умолчанию выглядит следующим образом:

ID  |  Task | DaysForTask

Таблица расписания (которая обновляется триггером) выглядит следующим образом:

ID | ProjectID | Task | DaysForTask | ScheduleOrder | EstimatedDate 

Таблица сведений о проекте выглядит следующим образом :

ProjectID  | ProjectName | EngagementType

После настройки таблицы расписаний пользователь может ввести дату начала, а отдельная функция рассчитывает EstimatedDate для каждой задачи. EstimatedDate просто рассчитывается как дата предыдущего задания + DaysForTask для текущего задания, поэтому оно основывается на порядке выполнения задания. Однако порядок задач может меняться от проекта к проекту или в середине проекта, и поэтому функция упорядочивает задачи по ScheduleOrder перед возвратом EstimatedDate, и пользователь может при необходимости изменять scheduleOrder. Но когда таблица Schedule впервые создается этим триггером, ScheduleOrder просто подсчитывает количество строк.

Итак, после добавления проекта № 18 в таблицу сведений о проекте таблица расписания должна выглядеть следующим образом:

ProjectID   |   Task    |  DaysForTask    |  ScheduleOrder
18          |   TaskA   |        5        |       1
18          |   TaskB   |      10         |       2

Я пытаюсь добавить поле ScheduleOrder с помощью RowNumber. Приведенный ниже код прекрасно работает без Row_Number, но он не работает, когда я включаю в него Row_Number. Я не получаю сообщение об ошибке, но триггер не выполняется, и таблица ProjectDetails не обновляется. Что-то не так с этим?

Delimiter //
CREATE TRIGGER `addProjMilestones` AFTER INSERT ON ProjectDetails
 FOR EACH ROW BEGIN
       If NOT (new.EngagementType = 'Consulting') THEN
           INSERT INTO Schedule (ProjectID,Task,DaysForTask,ScheduleOrder) 
           SELECT   NEW.ProjectID,Task,DaysForTask,ROW_NUMBER() OVER(ORDER BY ID ASC) AS RowNumber
           FROM Defaults; 
       end if;
  END;//
delimiter ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...