web-dev-qa-db-fra.com

Procédure stockée pour insérer des données d'une table à une autre avec les mêmes noms de colonne

J'ai une table principale et quelques tables plus petites.

  • Master table a C1 | C2 | C3 | C4 | C5 |
  • Une petite table a C1 | C2 | C3 |

Également @C1 (une variable dont la valeur correspond à la valeur de C1 dans la table Master.

Les noms de colonne correspondent aux deux tables. Je veux créer une procédure stockée qui insère les valeurs de la table Master (C1, C2 et C3) dans une table plus petite (C1, C2, C3).

Mon effort:

Create proc Schema.Proc
(@C1 int)
AS
BEGIN
INSERT INTO SmallTable
(C1, C2, C3) --- Columns of smaller table
Values (SELECT C1, C2, C3 ---Columns of Master table
FROM MasterTable)
WHERE C1 = @C1 --- Where value of C1 of Master table matches the value of @C1
END

S'il vous plaît aider

Je vous remercie

8
007

Vous devez utiliser la syntaxe INSERT INTO ... SELECT ..... - aucun mot clé VALUES impliqué:

CREATE PROCEDURE Schema.Proc
   (@C1 int)
AS
BEGIN
    INSERT INTO SmallTable(C1, C2, C3) --- Columns of smaller table
        SELECT C1, C2, C3 ---Columns of Master table
        FROM MasterTable
        WHERE C1 = @C1 --- Where value of C1 of Master table matches the value of @C1
END
10
marc_s

Tu étais proche! Tant que C1, C2 et C3 sont les mêmes types de données, cela devrait fonctionner.

Create proc Schema.Proc
(@C1 int)
AS
BEGIN
INSERT INTO SmallTable
(C1, C2, C3) --- Columns of smaller table
SELECT C1, C2, C3 ---Columns of Master table
FROM MasterTable
WHERE C1 = @C1
END
3
AdamV
CREATE OR REPLACE PROCEDURE P_INSERT(U_ID NUMBER)
AS
BEGIN
INSERT INTO X(ID,NAME,SALARY)--X IS TABLE NAME 
SELECT ABC_ID,NAME,SALARY FROM ABC
WHERE ABC_ID=U_ID;--ABC_ID IS SAME VALUE OF U_ID
END;
0
NAGESH