한 SQL Server 테이블에서 다른 테이블로 행을 복사하는 방법


91

두 개의 동일한 테이블이 있고 테이블에서 다른 테이블로 행을 복사해야합니다. 그렇게하는 가장 좋은 방법은 무엇입니까? (프로그래밍 방식으로 몇 개의 행만 복사해야하며 대량 복사 유틸리티를 사용할 필요가 없습니다.)

답변:


120

ID 열이없는 한

INSERT INTO TableNew
SELECT * FROM TableOld
WHERE [Conditions]

23
이 구문은 Table2에 ID 열이 있으면 작동하지 않으며 Table2가 동기화되지 않은 상태에서 Table1이 변경되면 나중에 중단되므로주의하십시오. 이 솔루션은 귀하의 경우에 완벽 할 수 있습니다. 이러한 고려 사항에 유의하십시오.
Michael Haren

11
삽입하려는 테이블에서 ID 열을 일시적으로 비활성화 하려면 SET IDENTITY_INSERT < table > ON(및 SET IDENTITY_INSERT < table > OFF)을 사용할 수 있습니다 . 데이터 세트 중간에 누락 된 레코드 몇 개를 복원하려고 노력했습니다.
nickb

1
table1의 기본 키가 table2에 외래 키로 존재하면 어떻게 될까요? 나는 똑같은 것을 가지고 있고, 무엇을 해야할지 모르겠습니다. table2 id에는 외래 키 AS "Technology_idTechnology"가 있고, 표 1에는 "idTechnology"라는 이름이 있습니다. table1의 모든 항목을 표 2는, 때 idTechnology 두 테이블에서 일치 ..
ZelelB

71

대체 구문 :

INSERT tbl (Col1, Col2, ..., ColN)
  SELECT Col1, Col2, ..., ColN
  FROM Tbl2
  WHERE ...

선택 쿼리에는 (물론) 표현식, 케이스 문, 상수 / 리터럴 등이 포함될 수 있습니다.


2
테이블이 약간 다를 때 좋습니다. 두 번째 테이블에 몇 개의 추가 열이 있고 수락 된 답변은 동일해야하므로 MSSQL에서 작동하지 않습니다.
Tony M

39

Jarrett의 대답은 새 테이블을 만듭니다.

Scott의 대답은 동일한 구조의 기존 테이블에 삽입됩니다.

구조가 다른 테이블에 삽입 할 수도 있습니다.

INSERT Table2
(columnX, columnY)
SELECT column1, column2 FROM Table1
WHERE [Conditions]

6
@ScottStonehouse : 당신이했던 것처럼이 답변에 다른 모든 답변을 모으고 있지만 코드 (포괄적으로 만들기)를 사용한다면 확실히 최고의 답변이 될 것입니다.
Michael Haren

6
INSERT INTO DestTable
SELECT * FROM SourceTable
WHERE ... 

SQL Server에서 작동


2
DestTable이없는 경우에만 작동합니다. 이 쿼리 전에 DestTable이 생성되면 오류가 발생합니다.
웹 개발자

2
실제로 대상 테이블이 없으면 실패합니다. 기존 DestTable이 비어 있지 않으면 오류가 발생할 수 있습니다.
Kaniu

5
SELECT * INTO < new_table > FROM < existing_table > WHERE < clause >

1
이 두 테이블이 sql-server의 diff 데이터베이스에 있으면 이것을 수행하는 방법이 있습니까?
Naresh

9
확실한! 데이터베이스를 완전히 한정하십시오. [서버 이름]. [스키마]. [테이블]. 예를 들어SELECT * INTO [SQLTEST].[dbo].[EMPLOYEES] FROM [SQLPROD].[dbo].[EMPLOYEES]
Jarrett Meyer

4
이것은 OP가 요구하는 것이 아닌 새로운 테이블을 생성합니다.
Conrad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.