Comment insérer des enregistrements basés sur l'insertion précédente?
-
06-07-2019 - |
Question
Voici ma procédure:
PROCEDURE add_values
AS
BEGIN
INSERT INTO TABLE_A ...
SELECT t.id, t.name FROM TABLE_C ("This selection will return multiple records")
END
Bien qu’il s’insère dans la TableA, je voudrais l’insérer dans une autre table (TableB) pour cet enregistrement particulier qui a été inséré dans la table A.
Les colonnes de TableA et TableB sont différentes. Est-il judicieux d’appeler une fonction avant de l’insérer dans TableB - Je voudrais effectuer certains get et sets en fonction de l’identifiant inséré dans tableA?
La solution
Essayez ceci
Entrées
declare @tblA table (id int,name varchar(20))
declare @tblB table (id int,name varchar(20))
declare @tblC table (id int identity,name varchar(20))
insert into @tblC
select 'name1' union all select 'name2' union all
select 'name3' union all select 'name4' union all
select 'name5' union all select 'name6' union all
select 'name7' union all select 'name8' union all
select 'name9' union all select 'name10' union all
select 'name11' union all select 'name12' union all
select 'name13' union all select 'name14' union all
select 'name15' union all select 'name16' union all
select 'name17' union all select 'name18' union all
select 'name19' union all select 'name20'
Requête
insert @tblA
output INSERTED.id, INSERTED.Name
into @tblB
select
id,name
from @tblC
where id % 2 = 0
select * from @tblA
select * from @tblB
Sortie: [Pour les deux tables A & amp; B]
nom d'utilisateur
2 name2
4 name4
6 name6
8 name8
10 name10
12 name12
14 name14
16 name16
18 name18
20 name20
En gros, j'insère ces enregistrements dans TableA à partir de TableC dont les identificateurs sont pairs. Et ensuite en utilisant la clause Output en insérant les valeurs de TableA à TableB
Pour plus d'informations, Clause OUTPUT
J'espère que cela a du sens
Autres conseils
vous pouvez créer un déclencheur pour le faire, s’il s’agit du seul moyen d’insérer des données dans la table. (sinon, cela fonctionnera à chaque insertion)
ou vous pouvez parcourir un curseur qui vous permettra de le faire à chaque insertion de la sélection
La meilleure technique dépend des détails des définitions de votre table et des requêtes associées. Sur la base des informations de votre question, peut-être que quelque chose comme ceci:
CREATE PROCEDURE add_values
AS
BEGIN
BEGIN TRANS
INSERT INTO TableA
SELECT id, name FROM TableC
INSERT INTO TableB
SELECT id, name FROM TableC
COMMIT
END
Dans MySQL, essayez INSERT..SELECT
, comme suit:
INSERT INTO tableB SELECT * FROM tableA where id = LAST_INSERT_ID();
http: // dev .mysql.com / doc / refman / 5.0 / fr / ansi-diff-select-into-table.html