我有这个存储过程,它已经工作了一段时间
CREATE PROCEDURE `ProjectFromTemplate`(
IN TemplateID INT,
IN NewProjectID INT
)
BEGIN
INSERT INTO Project_Stage
(
ProjectID,
StageID,
StageIndex,
Time
)
(
SELECT
NewProjectID,
StageID,
StageIndex,
Time
FROM Project_Stage
WHERE ProjectID = TemplateID
);
END
但我决定在表格中添加另一列,但我没有相应地更新过程。我希望该过程能够处理我添加的任何新行。我需要像这样的东西 伪 SQL
CREATE PROCEDURE `ProjectFromTemplate`(
IN TemplateID INT,
IN NewProjectID INT
)
BEGIN
INSERT INTO Project_Stage
(
ProjectID,
*
)
(
SELECT
NewProjectID,
*
FROM Project_Stage
WHERE ProjectID = TemplateID
);
END
有没有办法在 MySQL 中表达"所有后续行"之类的内容?
省
略INSERT
中的列子句以最大程度地减少代码更改,但您必须拼出Project_Stage
中的其余列,除非它不包含ProjectID
列。如果没有,那你的好。
注意:不过,在更改表后,您可能仍然需要重新编译(我不确定MySQL如何处理模式更改和编译过程)。
CREATE PROCEDURE `ProjectFromTemplate`(
IN TemplateID INT,
IN NewProjectID INT
)
BEGIN
INSERT INTO Project_Stage
SELECT
NewProjectID,
...
the rest of the Project_Stage columns you want go here
...
FROM Project_Stage
WHERE ProjectID = TemplateID
);
END