본문 바로가기
vita_Programing

MSSQL 테이블 복사하기 5가지 방법과 예제(bcp 포함)

by lemonvita 2024. 6. 6.
728x90
반응형

 

 

MSSQL 테이블 복사하는 5가지 방법과 예제(bcp 포함)

 

 

MSSQL 테이블 복사하는 5가지 방법과 예제
MSSQL 테이블 복사하는 5가지 방법과 예제

728x90

 

이번 포스팅 MS SQL 서버에서 테이블을 복사하는 다양한 방법에 대해 이야기해보려고 해요. 데이터를 다루다 보면 때로는 같은 데이터를 다른 곳에도 사용해야 할 때가 있죠.

테이블을 복사하고 데이터를 그대로 살리는 방법을 모른다면 단순히 create문으로 새 테이블을 생성해서 테이터를 복사하게 될텐데 그렇게 하면 너무 비효율적이지요. 그럴 때 우리를 도와줄 몇 가지 방법들이 있는데요, 오늘은 그 중 네 가지 방법을 소개하려고 합니다. 각각의 방법은 상황에 따라 유용하게 쓰일 수 있으니, 여러분의 필요에 맞게 선택해서 사용해 보세요.  그럼 지금부터 하나씩 알아보도록 하겠습니다.

 

테이블을 복사하는 4가지의 case

  1. 새 테이블 생성 & 데이터 복사
  2. 테이블만 복사 & 데이터 제외
  3. 기존 테이블에 전체 데이터 복사
  4. 기존 테이블에 특정 데이터만 복사

 

위의 4가지 case별로 자세하게 다루어 보겠습니다.

 

 

 

 
 

새 테이블 생성 & 데이터 복사

 

새 테이블을 생성하고 동시에 원본 테이블로부터 모든 데이터를 새 테이블에 복사합니다.

 

[구문]

SELECT *

    INTO 복사할 새 TABLE명 

    FROM 원본 TABLE명

 

[예제]

SELECT *

    INTO CS_CODE_COPY

    FROM CS_CODE

 

MSSQL 테이블 복사하는 4가지 방법과 예제

 

 

 

 

 

 

 
 

테이블만 복사 & 데이터 제외

 

새로운 테이블을 만들긴 하지만 데이터는 복사되지 않게 됩니다.
여기서는 WHERE 절에 1=2라는 조건을 추가함으로써,
이 조건을 만족하는 데이터가 존재하지 않아, 결국 복사될 데이터가 없는 상황이 만들어집니다. 

 

[구문]

SELECT *

    INTO 복사할 새 TABLE명

    FROM 원본 테이블명

    WHERE 1 = 2

 

 

[예제]

SELECT *

    INTO CS_CODE_COPY

    FROM CS_CODE

    WHERE 1 = 2

 

MSSQL 테이블 복사하는 4가지 방법과 예제

 

 

 

 

 

 
 

기존 테이블에 전체 데이터를 복사

 

데이터만을 기존의 구조가 동일한 테이블로 복사하는 방법입니다. 새로운 테이블을 만들지 않고, 오로지 데이터만을 옮깁니다. 만약 대상이 되는 테이블이 미리 존재하지 않는다면, 이 과정에서 에러가 발생하게 됩니다. 

 

[구문]

INSERT

    INTO 복사할 기존 TABLE명

   SELECT *

    FROM 원본 테이블명

​

또는 ('can only be specified when a column list is used and IDENTITY_INSERT is ON' 에러 발생 시)

​

INSERT (col1, col2, col3, ......)

    INTO 복사할 기존 TABLE명

   SELECT *

    FROM 원본 테이블명

 

 

 

[예제1]

INSERT

    INTO CS_CODE_COPY

   SELECT *

    FROM CS_CODE

 

 

[예제2]

예제 1의 방법을 사용했는데

'can only be specified when a column list is used and IDENTITY_INSERT is ON' 에러가 발생한다면 아래와 같이 컬럼명을 명시적으로 써 주어야 합니다.

INSERT

    INTO CS_CODE_COPY    (NO,GROUPCODE,CODE,NAME,CONDITION1,CONDITION2,CONDITION3,REMARK,USEYN)

   SELECT *

    FROM CS_CODE

 

MSSQL 테이블 복사하는 4가지 방법과 예제

 

 

 

 

 



 

기존 테이블에 특정 데이터만 복사

 

데이터만을 기존의 구조가 동일한 테이블로 복사하는 방법입니다. 새로운 테이블을 만들지 않고, 오로지 데이터만을 옮깁니다. 만약 대상이 되는 테이블이 미리 존재하지 않는다면, 이 과정에서 에러가 발생하게 됩니다. 

 

[구문]

INSERT

    INTO 복사할 기존 TABLE명

   SELECT *

    FROM 원본 테이블명

    WHERE  조건 

​

또는 ('can only be specified when a column list is used and IDENTITY_INSERT is ON' 에러 발생 시)

​

INSERT (col1, col2, col3, ......)

    INTO 복사할 기존 TABLE명

   SELECT *

    FROM 원본 테이블명

    WHERE  조건

 

 

 

[예제 1]

INSERT

    INTO CS_CODE_COPY

   SELECT *

    FROM CS_CODE

   WHERE  GROUPCODE = 'model'

 

 

 

[예제 2]

 

예제 1의 방법을 사용했는데

'can only be specified when a column list is used and IDENTITY_INSERT is ON' 에러가 발생한다면 아래와 같이 칼럼명을 명시적으로 써 주어야 합니다.

INSERT

    INTO CS_CODE_COPY    (NO,GROUPCODE,CODE,NAME,CONDITION1,CONDITION2,CONDITION3,REMARK,USEYN)

   SELECT *

    FROM CS_CODE

     WHERE  GROUPCODE = 'model'

 

 

 

 

테이블 복사 시 테이블 구조만 동일하게 생성되고 index는 생성되지 않는다는 점을 주의하세요.

 

 

 





 

bcp 명령어를 이용하여 테이블 복사하기

 

sql 쿼리문을 이용하여 테이블을 복사할 수도 있지만 bcp라는 명령어를 이용하여도 테이블 데이터를 내보낼 수 있습니다.

bcp(Bulk Copy Program)는 SQL Server의 명령줄 유틸리티로, 대량의 데이터를 빠르게 가져오고 내보낼 때 사용할 수 있습니다. bcp를 이용하여 테이블을 복사하는 자세한 방법을 단계별로 설명하겠습니다.

 

1. 'bcp'를 이용한 데이터 내보내기

먼저 원본 테이블의 데이터를 파일로 내보냅니다.

bcp YourDatabase.dbo.OriginalTable out C:\Path\To\Output\originaltable.bcp -c -T -S YourServerName

 

[사용법 안내]

  • YourDatabase.dbo.OriginalTable은 내보낼 테이블의 이름입니다.
  • out은 데이터를 내보낼 때 사용하는 옵션입니다.
  • C:\Path\To\Output\originaltable.bcp는 데이터를 저장할 파일 경로입니다.
  • -c는 문자 형식(char)을 사용하여 데이터를 내보내도록 지정합니다.
  • -T는 신뢰할 수 있는 연결을 사용하여 로그인합니다(Windows 인증).
  • -S는 SQL Server의 서버 이름을 지정합니다.

 

2. 테이블 구조 복사

데이터를 내보낸 후, 대상 데이터베이스에서 동일한 구조의 테이블을 생성합니다. SQL Server Management Studio(SSMS)나 T-SQL 스크립트를 사용하여 테이블을 생성할 수 있습니다.

CREATE TABLE NewTable (
    ID INT PRIMARY KEY,
    Name NVARCHAR(50),
    Age INT,
    CreatedDate DATETIME
);

 

 

3. bcp를 이용하여 데이터 가져오기

이제 내보낸 데이터를 새 테이블로 가져옵니다.

bcp YourDatabase.dbo.NewTable in C:\Path\To\Output\originaltable.bcp -c -T -S YourServerName

 

[사용법 안내]

  • YourDatabase.dbo.NewTable은 데이터를 가져올 테이블의 이름입니다.
  • in은 데이터를 가져올 때 사용하는 옵션입니다.
  • C:\Path\To\Output\originaltable.bcp는 가져올 데이터 파일의 경로입니다.
  • -c는 문자 형식(char)을 사용하여 데이터를 가져오도록 지정합니다.
  • -T는 신뢰할 수 있는 연결을 사용하여 로그인합니다(Windows 인증).
  • -S는 SQL Server의 서버 이름을 지정합니다. 

 

4. 예제

아래는 전체 과정을 보여주는 예제 스크립트입니다.

-- 데이터 내보내기
bcp YourDatabase.dbo.OriginalTable out C:\Path\To\Output\originaltable.bcp -c -T -S YourServerName

-- (필요 시) 원본 테이블의 구조를 새 테이블로 복사
CREATE TABLE NewTable (
    ID INT PRIMARY KEY,
    Name NVARCHAR(50),
    Age INT,
    CreatedDate DATETIME
);

-- 데이터 가져오기
bcp YourDatabase.dbo.NewTable in C:\Path\To\Output\originaltable.bcp -c -T -S YourServerName

 

 

4. 추가 옵션

bcp 명령에는 다양한 옵션이 있습니다. 몇 가지 유용한 옵션은 다음과 같습니다:

  • -U username : SQL Server 로그인 사용자 이름을 지정합니다.
  • -P password : SQL Server 로그인 비밀번호를 지정합니다.
  • -f format_file : 데이터 형식을 정의하는 형식 파일을 사용합니다.
  • -t field_term : 필드 구분자를 지정합니다.
  • -r row_term : 행 구분자를 지정합니다.
  • -b batch_size : 지정된 배치 크기만큼 데이터를 한 번에 전송합니다.
[예시]
bcp YourDatabase.dbo.OriginalTable out C:\Path\To\Output\originaltable.bcp -c -T -S YourServerName -b 1000

 

이 예제에서는 데이터를 1000행씩 배치로 내보내게 됩니다. bcp를 통해 효율적으로 데이터를 복사할 수 있으며, 대량의 데이터를 처리할 때 특히 유용합니다.

 

728x90
반응형