Come inserire i record in base all'inserto precedente?
-
06-07-2019 - |
Domanda
Ecco la mia procedura:
PROCEDURE add_values
AS
BEGIN
INSERT INTO TABLE_A ...
SELECT t.id, t.name FROM TABLE_C ("This selection will return multiple records")
END
Mentre si inserisce nella tabella A, vorrei inserirla in un'altra tabella (tabella B) per quel particolare record che è stato inserito nella tabella A.
Le colonne in Tabella A e TabellaB sono diverse. È consigliabile chiamare una funzione prima di inserirla in TableB - Vorrei eseguire determinati get e set in base all'ID inserito in tableA?
Soluzione
Prova questo
Ingressi
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'
Query
insert @tblA
output INSERTED.id, INSERTED.Name
into @tblB
select
id,name
from @tblC
where id % 2 = 0
select * from @tblA
select * from @tblB
Uscita: [per entrambe le tabelle A e amp; B]
nome ID
2 name2
4 name4
6 name6
8 name8
10 name10
12 name12
14 name14
16 name16
18 name18
20 name20
Fondamentalmente sto inserendo quei record in TableA da TableC i cui ID sono pari. E quindi usando la clausola Output inserendo i valori da TableA a TableB
Per ulteriori informazioni Clausola OUTPUT
Spero che abbia senso
Altri suggerimenti
puoi creare un trigger per farlo, se questo è l'unico modo per inserire dati nella tabella. (altrimenti verrà eseguito su ogni inserimento)
oppure puoi iterare su un cursore che ti permetterà di farlo con ogni inserimento dalla selezione
La migliore tecnica dipende dai dettagli delle definizioni della tabella e dalle query associate. Sulla base delle informazioni nella tua domanda, forse qualcosa del genere:
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
In MySQL prova INSERT..SELECT
, in questo modo:
INSERT INTO tableB SELECT * FROM tableA where id = LAST_INSERT_ID();
http: // dev .mysql.com / doc / refman / 5.0 / it / ANSI-diff-select-in-table.html