Как вставить записи на основе Предыдущей вставки?
-
06-07-2019 - |
Вопрос
Вот моя процедура:
PROCEDURE add_values
AS
BEGIN
INSERT INTO TABLE_A ...
SELECT t.id, t.name FROM TABLE_C ("This selection will return multiple records")
END
Пока он вставляется в TableA, я хотел бы вставить в другую таблицу (TableB) для этой конкретной записи, которая была вставлена в TableA.
Столбцы в TableA и TableB разные.Разумно ли вызывать функцию перед вставкой в TableB - я хотел бы выполнить определенные операции получения и установки на основе идентификатора, вставленного в TableA?
Решение
Попробуй это
Входные данные
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'
Запрос
insert @tblA
output INSERTED.id, INSERTED.Name
into @tblB
select
id,name
from @tblC
where id % 2 = 0
select * from @tblA
select * from @tblB
Выходной сигнал: [Для обеих таблиц A и B]
идентификационный номер
2 name2
4 name4
6 name6
8 name8
10 name10
12 name12
14 name14
16 name16
18 name18
20 name20
По сути, я вставляю эти записи в TableA из TableC, идентификаторы которых четны.А затем, используя предложение Output, вставляем значения из TableA в TableB
Для получения дополнительной информации Предложение ВЫВОДА
Надеюсь, в этом есть смысл
Другие советы
вы можете создать триггер для этого, если это единственный способ вставить данные в таблицу.(в противном случае он будет запускаться при каждой вставке)
или вы можете выполнить итерацию по курсору, что позволит вам делать это с каждой вставкой из выделенного фрагмента
Наилучший метод зависит от деталей ваших определений таблиц и связанных с ними запросов.Основываясь на информации в вашем вопросе, возможно, что-то вроде этого:
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
В MySQL попробуйте INSERT..SELECT
, вот так:
INSERT INTO tableB SELECT * FROM tableA where id = LAST_INSERT_ID();
http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-select-into-table.html