MSSQL 테이블 복사하는 5가지 방법과 예제(bcp 포함)
이번 포스팅 MS SQL 서버에서 테이블을 복사하는 다양한 방법에 대해 이야기해보려고 해요. 데이터를 다루다 보면 때로는 같은 데이터를 다른 곳에도 사용해야 할 때가 있죠.
테이블을 복사하고 데이터를 그대로 살리는 방법을 모른다면 단순히 create문으로 새 테이블을 생성해서 테이터를 복사하게 될텐데 그렇게 하면 너무 비효율적이지요. 그럴 때 우리를 도와줄 몇 가지 방법들이 있는데요, 오늘은 그 중 네 가지 방법을 소개하려고 합니다. 각각의 방법은 상황에 따라 유용하게 쓰일 수 있으니, 여러분의 필요에 맞게 선택해서 사용해 보세요. 그럼 지금부터 하나씩 알아보도록 하겠습니다.
테이블을 복사하는 4가지의 case
- 새 테이블 생성 & 데이터 복사
- 테이블만 복사 & 데이터 제외
- 기존 테이블에 전체 데이터 복사
- 기존 테이블에 특정 데이터만 복사
위의 4가지 case별로 자세하게 다루어 보겠습니다.
새 테이블 생성 & 데이터 복사
새 테이블을 생성하고 동시에 원본 테이블로부터 모든 데이터를 새 테이블에 복사합니다.
[구문]
SELECT *
INTO 복사할 새 TABLE명
FROM 원본 TABLE명
[예제]
SELECT *
INTO CS_CODE_COPY
FROM CS_CODE
테이블만 복사 & 데이터 제외
새로운 테이블을 만들긴 하지만 데이터는 복사되지 않게 됩니다.
여기서는 WHERE 절에 1=2라는 조건을 추가함으로써,
이 조건을 만족하는 데이터가 존재하지 않아, 결국 복사될 데이터가 없는 상황이 만들어집니다.
[구문]
SELECT *
INTO 복사할 새 TABLE명
FROM 원본 테이블명
WHERE 1 = 2
[예제]
SELECT *
INTO CS_CODE_COPY
FROM CS_CODE
WHERE 1 = 2
기존 테이블에 전체 데이터를 복사
데이터만을 기존의 구조가 동일한 테이블로 복사하는 방법입니다. 새로운 테이블을 만들지 않고, 오로지 데이터만을 옮깁니다. 만약 대상이 되는 테이블이 미리 존재하지 않는다면, 이 과정에서 에러가 발생하게 됩니다.
[구문]
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
기존 테이블에 특정 데이터만 복사
데이터만을 기존의 구조가 동일한 테이블로 복사하는 방법입니다. 새로운 테이블을 만들지 않고, 오로지 데이터만을 옮깁니다. 만약 대상이 되는 테이블이 미리 존재하지 않는다면, 이 과정에서 에러가 발생하게 됩니다.
[구문]
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를 통해 효율적으로 데이터를 복사할 수 있으며, 대량의 데이터를 처리할 때 특히 유용합니다.
'vita_Programing' 카테고리의 다른 글
MariaDB의 설치방법과 HeidiSQL로 접속 테스트하기 (0) | 2024.06.14 |
---|---|
JavaScript split 문자열 구분자로 잘라서 배열로 (0) | 2024.06.13 |
Javascript replace 함수 기본 사용법과 예제, 다양한 활용 (1) | 2024.06.02 |
Javascript 체크박스 모두 체크 및 해제 (0) | 2024.05.31 |
로또 645 1등 당첨 예상번호 생성기 소스 (0) | 2024.05.31 |