J'ai une table principale et quelques tables plus petites.
Master
table a C1 | C2 | C3 | C4 | C5 |
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
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
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
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;