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?

¿Fue útil?

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

( Ejemplo de cursor

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top