Como inserir registros com base na anterior Insert?
-
06-07-2019 - |
Pergunta
Aqui está o meu procedimento:
PROCEDURE add_values
AS
BEGIN
INSERT INTO TABLE_A ...
SELECT t.id, t.name FROM TABLE_C ("This selection will return multiple records")
END
Enquanto ele insere em TableA, gostaria de inserção em outra tabela (TableB) para esse registro particular que foi inserido no tableA.
As colunas TableA e TableB são diferentes. É sábio para chamar uma função antes de inserir TableB? - Eu gostaria de realizar certa Obtém e define com base no id inserido no tableA
Solução
Tente este
Entradas
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'
Consulta ??strong>
insert @tblA
output INSERTED.id, INSERTED.Name
into @tblB
select
id,name
from @tblC
where id % 2 = 0
select * from @tblA
select * from @tblB
Output: [Para a tabela A & B]
nome id
2 name2
4 name4
6 name6
8 name8
10 name10
12 name12
14 name14
16 name16
18 name18
20 name20
Basicamente eu estou inserindo esses registros em TableA de TableC cujo do id são ainda. E, em seguida, usando cláusula de saída inserindo os valores de TableA para TableB
Para mais informações OUTPUT Cláusula
Espero que isso faz sentido
Outras dicas
Você pode criar um gatilho para fazê-lo, se esta é a única maneira que você inserir dados na tabela. (Caso contrário, ele será executado em cada inserção)
ou você pode interagir em um cursor que lhe permitirá fazê-lo com cada inserção da seleção
A melhor técnica depende dos detalhes de suas definições de tabela e as consultas associadas. Com base na informação em sua pergunta, talvez algo como isto:
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
No MySQL tentativa INSERT..SELECT
, como este:
INSERT INTO tableB SELECT * FROM tableA where id = LAST_INSERT_ID();
http: // dev .mysql.com / doc / refman / 5.0 / en / ansi-diff-select-a-table.html