¿Cómo insertar registros basados ??en la inserción anterior?
-
06-07-2019 - |
Pregunta
Aquí está mi procedimiento:
PROCEDURE add_values
AS
BEGIN
INSERT INTO TABLE_A ...
SELECT t.id, t.name FROM TABLE_C ("This selection will return multiple records")
END
Mientras se inserta en la Tabla A, me gustaría insertar en otra tabla (Tabla B) para ese registro en particular que se insertó en la tabla A.
Las columnas en TableA y TableB son diferentes. ¿Es aconsejable llamar a una función antes de insertarla en la Tabla B? Me gustaría realizar ciertos get y sets basados ??en la identificación insertada en la tabla A?
Solución
Prueba esto
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'
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
Salida: [Para ambas tablas A y amp; B]
nombre de identificación
2 name2
4 name4
6 name6
8 name8
10 name10
12 name12
14 name14
16 name16
18 name18
20 name20
Básicamente estoy insertando esos registros en TableA desde TableC cuyos identificadores son pares. Y luego, usando la cláusula de salida insertando los valores de TableA a TableB
Para obtener más información Cláusula OUTPUT
Espero que esto tenga sentido
Otros consejos
puede crear un activador para hacerlo, si esta es la única forma de insertar datos en la tabla. (de lo contrario, se ejecutará en cada inserción)
o puede iterar en un cursor que le permitirá hacerlo con cada inserción de la selección
La mejor técnica depende de los detalles de las definiciones de la tabla y las consultas asociadas. Según la información en su pregunta, tal vez algo como esto:
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
En MySQL intente INSERT..SELECT
, así:
INSERT INTO tableB SELECT * FROM tableA where id = LAST_INSERT_ID();
http: // dev .mysql.com / doc / refman / 5.0 / es / ansi-diff-select-into-table.html