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

コードの変更を最小限に抑えるために、のcolumn句を省略しますが、列が含まれていない場合を除いてINSERT、残りの列をスペルアウトする必要があります。そうでない場合は、あなたの良い。Project_StageProjectID

注意:ただし、テーブルを変更した後でも再コンパイルが必要になる場合があります(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 に答える