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.