이전 삽입물을 기반으로 레코드를 삽입하는 방법은 무엇입니까?
-
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에 삽입하는 동안 Tablea에 삽입 된 특정 레코드에 대해 다른 테이블 (TableB)에 삽입하려고합니다.
Tablea와 TableB의 열은 다릅니다. tableb에 삽입하기 전에 함수를 호출하는 것이 현명합니까? - Tablea에 삽입 된 ID를 기반으로 특정 gets 및 세트를 수행하고 싶습니다.
해결책
이 시도
입력
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
기본적으로 나는 해당 레코드를 ID의 테이블에서 Tablea에 삽입하고 있습니다. 그런 다음 출력 절을 사용하여 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/en/ansi-diff-select-into-table.html
제휴하지 않습니다 StackOverflow