Вопрос

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top