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?

Était-ce utile?

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

( Exemple de curseur

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top