Как вставить записи на основе предыдущей вставки? - PullRequest
0 голосов
/ 29 ноября 2009

Вот моя процедура:

PROCEDURE add_values
AS
BEGIN

   INSERT INTO TABLE_A ...
   SELECT t.id, t.name FROM TABLE_C ("This selection will return multiple records")

END

Пока он вставляется в таблицу A, я бы хотел вставить в другую таблицу (TableB) для той конкретной записи, которая была вставлена ​​в таблицу A.

Столбцы в TableA и TableB различны. Разумно ли вызывать функцию перед вставкой в ​​TableB - я хотел бы выполнить определенные операции получения и установки на основе идентификатора, вставленного в tableA?

Ответы [ 4 ]

1 голос
/ 29 ноября 2009

Попробуйте это

Входы

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

Для получения дополнительной информации OUTPUT Clause

Надеюсь, это имеет смысл

0 голосов
/ 29 ноября 2009

Лучший метод зависит от деталей ваших определений таблиц и связанных запросов. Основываясь на информации в вашем вопросе, может быть что-то вроде этого:

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
0 голосов
/ 29 ноября 2009

вы можете создать триггер для этого, если это единственный способ вставить данные в таблицу. (иначе он будет работать при каждой вставке)

или вы можете перебрать курсор, что позволит вам делать это с каждой вставкой из выделения

( Пример курсора

0 голосов
/ 29 ноября 2009

В 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

...