Задать вопрос
@Olya_Ann

Как реализовать каскадное добавление?

Добрый вечер, подскажите, пожалуйста, как правильно реализовать каскадное добавление? Вот у меня есть три таблицы Работник, Задача, Реализация задачи.
647e663077a05196441670.png
На сайте есть форма добавления новой задачи. В момент отправки вызывается следующая процедура:
ALTER procedure [dbo].[addTask]
	@definition varchar(1000),
	@userEmail varchar(30)
as
begin
	if (@userEmail is not null)
		BEGIN
			INSERT INTO Задача(Описание)
			VALUES(@definition)
		END
	
	UPDATE Реализация_задачи SET ID_работника = (SELECT ID_работника FROM Работник WHERE Электронная_почта = @userEmail)
		WHERE ID_работника = 1
end


После того, как произошла вставка данных в таблицу Задача, срабатывает триггер:
ALTER TRIGGER [dbo].[realizeTask]
ON [dbo].[Задача]
AFTER insert
AS
insert into Реализация_задачи(ID_работника,Номер_задачи,) 
	values(1,(SELECT Номер_идеи FROM inserted))


Так как в триггер нельзя передать никакой параметр, то в качестве ID_работника просто прописываем 1. После того, как триггер отработал, возвращаемся в процедуру и обновляет таблицу Реализация_задачи, где заменяем ID_работника уже на реальное значение.

Подскажите, пожалуйста, наверное, такой подход является не верным? Сейчас я заполняю каким-то дефолтным значением ID_работника, но это впоследствии может привести к ряду ошибок. Но как иначе заполнить таблицу Реализация задачи я не знаю. Подскажите, пожалуйста?

Буду благодарна за Вашу помощь)
  • Вопрос задан
  • 163 просмотра
Подписаться 1 Простой 9 комментариев
Решения вопроса 1
rozhnev
@rozhnev Куратор тега SQL
Fullstack programmer, DBA, медленно, дорого
CREATE PROCEDURE [dbo].[addTask]
  @definition varchar(1000),
  @userEmail varchar(30)
AS
BEGIN
  IF (@userEmail is not null)
    BEGIN
       INSERT INTO Задача(Описание) VALUES (@definition)
      
       INSERT INTO Реализация_задачи (ID_работника, ID_задачи) 
       SELECT ID_работника, SCOPE_IDENTITY() 
       FROM Работник WHERE Электронная_почта = @userEmail
    END
END
GO

EXEC addTask @definition = 'New task', @userEmail = 'Employee@mail.com'
GO


https://sqlize.online/sql/mssql2017/72762ba5b14369...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы