Я пытаюсь создать в моей таблице расписания триггер, который автоматически выведет новую информацию в таблицу часов. у меня проблема в том, что в таблице часовых имен имена сотрудников являются заголовками столбцов. это означает, что мне нужно динамически построить заголовок столбца, чтобы входные часы помещались в соответствующий столбец. ниже приведен скрипт, который я сейчас пытаюсь заставить работать, но я продолжаю сталкиваться с проблемами. либо mysql верстак просто перестанет работать и выключится, либо, когда я нажму применить, все, кажется, будет успешно выполнено, однако триггер на самом деле не создается.
таблица расписания выглядит следующим образом:
------------------------------
id|project_id|employee_id|hours|
--|----------|-----------|-----|
1 | 11 | 22 |8 |
--------------------------------
таблица часовых графиков выглядит следующим образом:
----------------------------------------
id|ProjectID |ScheduleID |sam|jon|smith|
--|----------|-----------|---|---|-----|
----------------------------------------
таблица сотрудников выглядит следующим образом;
------------
id|Employee|
--|--------|
1 |sam |
2 |jon |
22|smith |
------------
мой оператор триггера выглядит так:
CREATE DEFINER=`root`@`localhost` TRIGGER `projectscheduler`.`schedule_AFTER_INSERT` AFTER INSERT ON `schedule` FOR EACH ROW
SET @EMPNAME=(SELECT Employee FROM employees WHERE id = NEW.employee_id);
BEGIN
INSERT INTO hourmap (ProjectID, ScheduleID, @EMPNAME)
VALUES (NEW.project_id, NEW.id, NEW.hours);
END
вот моя попытка хранимой процедуры, однако, все равно не повезло.
USE `projectscheduler`$$
CREATE DEFINER=`root`@`localhost` TRIGGER `projectscheduler`.`schedule_AFTER_INSERT` AFTER INSERT ON `schedule` FOR EACH ROW
BEGIN
SET @sql = NULL;
SELECT CONCAT('SELECT Emoloyee FROM employees WHERE id = NEW.id') INTO @sql;
SET @sql = CONCAT('INSERT INTO hourmap (ProjectID, ScheduleID, `',@sql,'`) VALUES(NEW.project_id, NEW.id, NEW.hours)');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
ERROR 1336: Dynamic SQL is not allowed in stored function or trigger