당신이 테이블 B에 삽입을하는
MERGE
문을 구성 할 수 있습니다 경우이의 핵심은
을 달성하기 위해 시도 할 수있는 - 당신이 할 수있는 경우에 때문에, 당신은 을 참조하는 OUTPUT
절을 구성 할 수 있습니다. 표 B에 새로 삽입 한 행과 표 A의 해당 행을 구성 할 수 있습니다. 불행히도 INSERT
문을 사용하여이 작업을 수행 할 수 없습니다.
아래 스크립트의 모든
은 무슨 일이 일어나고 있는지 보여주기 위해 그들을 분할, 한 번에 실행해야합니다 :
데이터 설정 :
declare @TabA table (ida int IDENTITY(1,1),col1 char(4),col2 char(3),idb int)
insert into @TabA(col1,col2,idb) values
('xxxx','foo',NULL),
('yyyy','bar',NULL)
declare @TabB table (idb int IDENTITY(110,1),col3 char(4),col4 char(3))
insert into @TabB(col3,col4) values
('uuuu','rrr'),
('vvvv','ttt')
MERGE
단지 할 삽입에 강제. 여기서 CASE
표현은, 내가 ID를 사용하고 여기에 테이블 A.의 값에 따라 col3
및 col4
에서 새 값을 도출하지만, 그러나 그것은 당신이해야 할 무엇이다 :
declare @Res table (ida int,idb int)
;merge into @TabB tb
using (select ida,col1,col2 from @TabA where idb is null) src
on 1 = 0
when not matched then insert (col3,col4) values (case src.ida when 1 then 'aaaa' else 'bbbb' end,case src.ida when 1 then 'www' else 'mmm' end)
output src.ida,inserted.idb into @Res;
이제 @Res
두 테이블에서 일치하는 ID가 포함, 그래서 업데이 트를 구성하는 간단 복사하는 다시 테이블 A에 새 ID를 :
update a set idb = r.idb
from @TabA a
inner join @Res r on a.ida = r.ida
결과 :
select * from @TabA
select * from @TabB
ida col1 col2 idb
----------- ---- ---- -----------
1 xxxx foo 112
2 yyyy bar 113
(2 row(s) affected)
idb col3 col4
----------- ---- ----
110 uuuu rrr
111 vvvv ttt
112 aaaa www
113 bbbb mmm
,
새로운'col3'과'col4' 값은 어디서 오는가? 그리고'B '테이블의'ida' 컬럼을 대신'idb'라고 부르면 안 될까요? – Andomar
1 대 1 매핑 인 경우 테이블 A의 ID를 테이블 B에 저장하는 대신 다른 방법으로 저장하는 것이 어떻습니까? – Macros
이 'Foriegn Keys'가있는 시나리오가 아닙니까?그래서 두 테이블 사이에 관계를 만들 수 있습니다. –