0

我有这个存储过程,它已经工作了一段时间

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 中表达“所有后续行”之类的东西?

4

1 回答 1

0

省略列子句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
于 2012-07-05T13:39:57.407 回答