2011-02-24 4 views
2

select 문으로 인해 두 테이블에 삽입하는 방법.2 테이블에 삽입 테이블의 결과를 선택하십시오. SQL Server

나는 여러 데이터 테이블이 있습니다

val1 val2 val3 .... valn 
------------------------- 
12 21 54  78 
.. .. ..  .. 

뭔가처럼이 : 그래서 VAL1, val2만큼이 같은 2 개 필드를 새 테이블에 삽입 할 Select t1.val1, t1.val2, t2.val3, t2.val4 into table1 t1 , table2 t2 from tablename.

:

tabble1: 
id fieldvalue 
1 val1 
2 val2 

val3과 val4도 동일합니다. 이것이 성취 될 수있는 방법

tabble2: 
id fieldvalue 
1 val3 
2 val4 

이것은 가능합니까?

+0

단일 SQL 문으로는 불가능합니다. INSERT는 항상 하나의 테이블에 있습니다. 두 개의 테이블을 채우려면 두 개의 명령문이 필요합니다. –

+0

기존 테이블을 정규화하려고합니까? –

+0

실제로는 속성을 일부만 분할하면 – cMinor

답변

2

허용하면 달성하려는 것을 이해하기 어렵습니다. 실제로 marc_s가 명시한 것처럼 두 개의 다른 테이블에 행을 삽입하려고하면 두 개의 insert 문을 사용해야합니다.

그러나 표본에서 판단 할 때 두 테이블에 삽입하려고하지 않고 두 테이블을 사용하여 데이터를 조 변경 한 세 번째 테이블에 삽입 할 수 있습니다. 물론

Insert MysteryTable(Id, fieldvalue) 
Select 1, val1 
From Table1 
Union All 
Select 2, val2 
From Table1 
Union All 
Select 3, val3 
From Table2 --assuming these come from Table2. Isn't clear in the OP 
Union All 
Select 4, val4 
From Table2 --assuming these come from Table2. Isn't clear in the OP 

표 1 또는 표 2는 많은 행이있는 경우, 당신은 분명히 당신의 MysteryTable에서 같은 ID 값으로 많은 행을 얻을 것이다 : 그런 경우에, 당신은 하나의 문에 그것을 할 수 있습니다. OP

에 변화를 주어

업데이트는 수행 할 수 있습니다 추구하지만, 위의 것과 유사한 두 개의 쿼리를 필요로 무엇을 당신의 설명을 감안할 때.

Insert Table1(Id, fieldvalue) 
Select 1, val1 
From SourceTable 
Union All 
Select 2, val2 
From SourceTable 

Insert Table2(Id, fieldvalue) 
Select 1, val3 
From SourceTable 
Union All 
Select 2, val4 
From SourceTable 

아이디 값이 될 것이다 생성 또 다른 변화 :

With NumberedItems As 
    (
    Select val1 As val 
    From SourceTable 
    Union All 
    Select val2 
    From SourceTable 
    ) 
Insert Table1(id, fieldname) 
Select Row_Number() Over(Order By val) As Num 
    , val 
From SourceTable 

With NumberedItems As 
    (
    Select val3 As val 
    From SourceTable 
    Union All 
    Select val4 
    From SourceTable 
    ) 
Insert Table2(id, fieldname) 
Select Row_Number() Over(Order By val) As Num 
    , val 
From SourceTable 

, BTW 위의 예에서 나는 Union All 사용하면 데이터를 정상화하려고하지만 경우에, 당신은 할 수 있습니다 별개의 값. 이 경우 Union All 대신 Union을 사용하십시오.

+0

실례합니다 @ 토마스, 내가 vally, val2, val3, val4 .... 같은 여러 열 값을 가지고 aply 당신의 솔루션을하는 방법이 될 것이라고 valn 나는 동적 SQL 사용할 수 있지만 어떻게? – cMinor

+0

두 가지 솔루션 중 동적 SQL을 구현하는 것이 더 간단합니까? – cMinor

+0

@darkcminor - 중간 계층 구성 요소 (right?)에서이 작업을 수행하고 있기 때문에 실제로 밀어 넣기입니다. 두 번째 솔루션의 장점은 자동으로 순차 번호를 만들어 원하는 것으로 가정한다는 것입니다. – Thomas

0

1 열에서 2 행을 만들고 다른 열에서 값을 가져 오는 단일 insert 문을 사용할 수 없습니다.

id 필드가 자동 증가 열인 것으로 가정하면 열당 하나의 삽입 문을 작성하면됩니다.

insert into table1 (fieldname) 
select val1 from tableName 

insert into table1 (fieldname) 
select val2 from tableName 

insert into table1 (fieldname) 
select val3 from tableName 

insert into table1 (fieldname) 
select val4 from tableName 
+0

은 호출 할 때 업데이트 문이 아니라 INSERT 문입니다. 이 경우에는 INSERT INTO table1 (field1, field2, field3, field4)을 쓰면됩니다. SELECT val1, val2, val3, val4 from otherTable' ... –

+0

죄송합니다. 4 열의 모든 내용을 채워야하는 "fieldname"열을 원한다고 생각합니다. 그래서 네 개의 insert 문이 필요합니다. –

+0

안녕하세요. 조금 질문을 수정했습니다. 별명을 사용하여 2 개의 다른 테이블에 질문 에서처럼 선택 결과를 삽입 할 수 없습니까? 권리? – cMinor

관련 문제