SQL Server-데이터베이스 테이블의 복사본을 만들어 동일한 데이터베이스에 배치 하시겠습니까?


108

데이터베이스 DB에 ABC 테이블이 있습니다. 동일한 DB에 이름이 ABC_1, ABC_2, ABC_3 인 ABC의 복사본을 만들고 싶습니다. Management Studio (권장) 또는 SQL 쿼리를 사용하여 어떻게 할 수 있습니까?

SQL Server 2008 R2 용입니다.


1
직접적인 관련이 없지만 위의 사용 사례와 관련 될 수있는 다른 게시물 -stackoverflow.com/questions/6810425/… 이것은 테이블의 복사본을 편집하려는 경우에 유용 할 수 있습니다 (예 : null 허용, 데이터 유형 변경 등). .) 복사본을 다시 만들 필요가 없습니다.
— sequel.learner

답변:


212

사용 SELECT ... INTO:

SELECT *
INTO ABC_1
FROM ABC;

이렇게하면 ABC_1열 구조 ABC가 같고 동일한 데이터를 포함 하는 새 테이블이 생성 됩니다. 그러나 제약 조건 (예 : 키, 기본값)은 복사되지 않습니다.

매번 다른 테이블 이름으로이 쿼리를 여러 번 실행할 수 있습니다.


데이터를 복사 할 필요가없는 경우 동일한 열 구조로 새 빈 테이블을 생성 WHERE하기 위해서만 허위 표현식이 있는 절을 추가합니다 .

SELECT *
INTO ABC_1
FROM ABC
WHERE 1 <> 1;

3
내 문제에 대한 완벽한 대답입니다.
— sequel.learner

8
완전히 작동하지 않습니다 .... 원본의 계산 된 열은 대상에서 동일하게 복사되지 않습니다. 또한, PK 및 기본 제약 조건 중 하나를 복사되지 않습니다
— 사이먼 그린

@SimonGreen-이 문제에 대한 새 질문을 코드로 게시 할 수 있습니다.
— Mahmoud Gamal

3
물론 완전히 작동하지는 않습니다. 그는 제약 조건이 복사되지 않으며 기본 키 또는 기본값을 사용하지 않는다고 경고했습니다. 그가 제공하는 명령은 (그가 말한 것처럼) 동일한 열 구조로 새 테이블을 만들고 모든 데이터를 새 테이블에 삽입합니다.
— user5855178

1
내가 사용 찾을 SELECT TOP(0) *항상 거짓보다 청소기를 WHERE문 방법
— 티민

21

SSMS UI를 통한 스키마 복사 (DDL 생성)

SSMS에서 개체 탐색기 에서 데이터베이스를 확장하고 테이블 로 이동하여 관심있는 테이블을 마우스 오른쪽 단추로 클릭하고 다음으로 스크립트 테이블 , 만들기 대상 , 새 쿼리 편집기 창을 선택 합니다. 검색 (find)를하고 (대체 CTRL + H를 (넣어 즉 테이블 이름을 변경) ABC에 어떤 찾기 필드 ABC_1에 바꿀 클릭 한 다음 확인을 ).

T-SQL을 통해 스키마 복사

SQL로 이것을 수행하는 방법을 보여주는 다른 답변도 잘 작동하지만이 방법의 차이점은 인덱스, 제약 조건 및 트리거도 얻을 수 있다는 것입니다.

데이터 복사

데이터를 포함하려면이 테이블을 만든 후 아래 스크립트를 실행하여 ABC의 모든 데이터를 복사합니다 (ID 필드가있는 경우 동일한 ID 값 유지).

set identity_insert ABC_1 on
insert into ABC_1 (column1, column2) select column1, column2 from ABC
set identity_insert ABC_1 off

1
이 방법이 인덱스도 복사합니까? 나는 그것을 시도했지만 그렇지 않았습니다.
— BornToCode

3
ID 열을 "수동"으로 설정 IDENTITY_INSERT하려면 ON 으로 설정해야합니다 . 예제에서 순서를 혼합했습니다. 또한 열을 명시해야합니다
— jean

2
감사합니다 @jean; 6 년 만에 잘 발견되었습니다! 결정된.
— JohnLBevan 19-06-04

이것은 거의 문제를 해결했습니다. 마지막 트릭은 SSMS의 트리에있는 "Columns"폴더를 편집기로 끌어 열 목록을 가져올 수 있다는 것입니다. 모든 테이블에 타임 스탬프 열이 있으므로 열 목록을 가져온 다음 타임 스탬프를 제거해야했습니다.
— Wade Hatler

10

모든 제약 조건 및 키를 사용하여 테이블을 복제하려면 다음 단계를 따르십시오.

  1. SQL Management Studio에서 데이터베이스를 엽니 다.
  2. 복제하려는 테이블을 마우스 오른쪽 버튼으로 클릭합니다.
  3. 스크립트 테이블을-> 만들기 대상-> 새 쿼리 편집기 창으로 선택합니다. 그러면 새 쿼리 창에서 테이블을 다시 만드는 스크립트가 생성됩니다.
  4. 스크립트에서 테이블 이름과 상대 키 및 제약 조건을 변경합니다.
  5. 스크립트를 실행하십시오.

그런 다음 데이터를 복사하려면 아래 스크립트를 실행하십시오.

SET IDENTITY_INSERT DuplicateTable ON

INSERT Into DuplicateTable ([Column1], [Column2], [Column3], [Column4],... ) 
SELECT [Column1], [Column2], [Column3], [Column4],... FROM MainTable

SET IDENTITY_INSERT DuplicateTable OFF

4

첫 번째 옵션

select *
  into ABC_1
  from ABC;

두 번째 옵션 : SSIS 사용, 즉 개체 탐색기에서 데이터베이스를 마우스 오른쪽 버튼으로 클릭> 모든 작업> 데이터 내보내기

  • 소스 및 대상 : DB
  • 소스 테이블 : ABC
  • 대상 테이블 : ABC_1 (테이블이 생성됨)

2

이것은 또 다른 옵션입니다.

select top 0 * into <new_table> from <original_table>

2
이 요청은 데이터없이 테이블을 복사합니다. 사용자가 테이블 복사를 요청했습니다.
— Alekzander

1

SQL Server manegement Studio 또는 netcat을 사용하면 SQL을 조작하기가 더 쉽습니다.


1

테이블과 해당 데이터, 제약 조건 및 트리거를 복사하려면 SSIS를 작성해야합니다. 우리 조직에는 무료 버전을 다운로드 할 수있는 kalrom Systems의 Kal Admin이라는 소프트웨어가 있습니다 (표 복사 기능은 선택 사항이라고 생각합니다)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.