如何将一行中的所有列复制到除一行之外的新行?

时间:2012-07-05 13:32:34

标签: mysql sql stored-procedures

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

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中表达类似“所有后续行”的内容?

1 个答案:

答案 0 :(得分: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