문자 형식을 사용하여 데이터 가져오기 또는 내보내기(SQL Server)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System(PDW)

다른 프로그램에서 사용할 텍스트 파일로 데이터를 대량으로 내보내거나 다른 프로그램에서 생성된 텍스트 파일에서 데이터를 대량으로 가져올 때 문자 형식을 사용하는 것이 좋습니다.

문자 형식은 모든 열에 문자 데이터 형식을 사용합니다. 스프레드시트 등의 다른 프로그램에서 데이터를 사용하거나 Oracle 등의 다른 데이터베이스의 데이터를 SQL Server 인스턴스로 복사할 때는 문자 형식으로 정보를 저장하십시오.

참고 항목

Microsoft SQL Server 인스턴스 및 유니코드 문자 데이터는 포함하지만 확장 문자 또는 DBCS(더블바이트 문자 집합) 문자는 포함하지 않는 데이터 파일 간에 데이터를 대량 전송하는 경우에는 유니코드 문자 형식을 사용하세요. 자세한 내용은 유니코드 문자 형식을 사용하여 데이터 가져오기 또는 내보내기(SQL Server)를 참조하세요.

항목 내용
문자 형식 사용 시 고려 사항
문자 형식의 명령 옵션
예제 테스트 조건
 ● 샘플 테이블
 ● 샘플 비 XML 서식 파일
예제
 ● bcp 및 문자 형식을 사용하여 데이터 내보내기
 ● bcp 및 문자 형식을 사용하여 서식 파일 없이 데이터 가져오기
 ● bcp 및 문자 형식을 사용하여 XML 이외의 서식 파일과 함께 데이터 가져오기
 ● 서식 파일 없이 BULK INSERT 및 문자 형식 사용
 ● XML 이외의 서식 파일과 함께 BULK INSERT 및 문자 형식 사용
 ● XML 이외의 서식 파일과 함께 OPENROWSET 및 문자 형식 사용
관련 작업

문자 형식 사용 시 고려 사항

문자 형식을 사용할 때 다음 사항을 고려하십시오.

  • 기본적으로 bcp 유틸리티 는 탭 문자로 문자 데이터 필드를 구분하며 줄 바꿈 문자로 레코드를 종료합니다. 다른 종결자를 지정하는 방법에 대한 자세한 내용은 필드 및 행 종결자 지정(SQL Server)을 참조하세요.

  • 기본적으로 문자 모드의 데이터를 대량으로 내보내거나 대량으로 가져오기 전에 다음 변환이 수행됩니다.

    대량 작업 방향 전환
    내보내기 데이터를 문자 표시로 변환합니다. 명시적으로 요청된 경우 데이터는 문자 열에 대해 요청된 코드 페이지로 변환됩니다. 코드 페이지를 지정하지 않으면 클라이언트 컴퓨터의 OEM 코드 페이지를 사용하여 문자 데이터가 변환됩니다.
    가져오기 필요한 경우 문자 데이터를 네이티브 표현으로 변환하고 클라이언트의 코드 페이지에서 대상 열의 코드 페이지로 문자 데이터를 변환합니다.
  • 변환 중에 확장 문자가 손실되지 않도록 하려면 유니코드 문자 형식을 사용하거나 코드 페이지를 지정합니다.

  • 문자 서식 파일로 저장되는 모든 sql_variant 데이터는 메타데이터 없이 저장됩니다. 각 데이터 값은 암시적 데이터 변환 규칙에 따라 char 형식으로 변환됩니다. sql_variant 열로 데이터를 가져오는 경우 char로 변환됩니다. sql_variant 이외의 데이터 형식으로 열에 가져오는 경우 해당 데이터는 char에서 암시적 변환을 거칩니다. 데이터 변환에 대한 자세한 내용은 데이터 형식 변환(데이터베이스 엔진)을 참조하세요.

  • bcp 유틸리티는 쉼표 구분 기호와 같은 숫자 그룹화 기호 없이 소수점 뒤의 네 자리가 있는 문자 형식 데이터 파일로 money 값을 내보냅니다. 예를 들어 값 1,234,567.123456이 포함된 money 열은 1234567.1235 문자열 데이터 파일로 대량 내보내집니다.

문자 형식의 명령 옵션

bcp, BULK INSERT 또는 INSERT ... SELECT * FROM OPENROWSET(BULK...)를 사용하여 테이블로 문자 형식 데이터를 가져올 수 있습니다. bcp 명령 또는 BULK INSERT 문의 경우 문에서 데이터 형식을 지정할 수 있습니다. INSERT ... SELECT * FROM OPENROWSET(BULK...) 문의 경우 서식 파일에서 데이터 형식을 지정해야 합니다.

다음 명령 옵션에서 문자 형식을 사용할 수 있습니다.

명령 옵션 설명
bcp -c bcp 유틸리티가 문자 데이터를 사용하도록 합니다.*
BULK INSERT DATAFILETYPE ='char' 데이터를 대량 가져올 때 문자 형식을 사용합니다.
OPENROWSET 해당 없음 서식 파일을 사용해야 합니다.

*문자(-c) 데이터를 이전 버전의 SQL Server 클라이언트와 호환되는 형식으로 로드하려면 -V 스위치를 사용하세요. 자세한 내용은 SQL Server 이전 버전으로부터 기본 및 문자 형식 데이터 가져오기를 참조하세요.

참고 항목

또는 서식 파일에서 필드별로 서식을 지정할 수 있습니다. 자세한 내용은 데이터를 가져오거나 내보내기 위한 서식 파일(SQL Server)을 참조하세요.

예제 테스트 조건

이 항목의 예제는 아래에 정의된 테이블 및 서식 파일을 기반으로 합니다.

샘플 테이블

아래 스크립트는 테스트 데이터베이스, myChar 테이블을 만들고 테이블을 초기 값으로 채웁니다. Microsoft SSMS(SQL Server Management Studio)에서 다음 TRANSACT-SQL을 실행합니다.

CREATE DATABASE TestDatabase;
GO

USE TestDatabase;
CREATE TABLE dbo.myChar ( 
   PersonID smallint NOT NULL,
   FirstName varchar(25) NOT NULL,
   LastName varchar(30) NOT NULL,
   BirthDate date,
   AnnualSalary money
   );

-- Populate table
INSERT TestDatabase.dbo.myChar
VALUES 
(1, 'Anthony', 'Grosse', '1980-02-23', 65000.00),
(2, 'Alica', 'Fatnowna', '1963-11-14', 45000.00),
(3, 'Stella', 'Rossenhain', '1992-03-02', 120000.00);

-- Review Data
SELECT * FROM TestDatabase.dbo.myChar;

샘플 비 XML 서식 파일

SQL Server 은(는) 두 유형의 서식 파일, 즉 비 XML 서식 파일과 XML 서식 파일을 지원합니다. 비 XML 서식 파일은 이전 버전의 SQL Server에서 원래 지원했던 서식 파일입니다. 자세한 내용은 비 XML 서식 파일(SQL Server)을 검토하세요. 다음 명령은 bcp 유틸리티를 사용하여 myChar.fmt 스키마에 따라 비 XML 서식 파일 myChar을 생성합니다. bcp 명령을 사용하여 서식 파일을 만들려면 데이터 파일 경로 대신 format 인수를 지정하고 NUL 을 사용합니다. 서식 옵션에는 -f 옵션도 필요합니다. 또한 이 예제에서는 한정자 c를 사용하여 문자 데이터를 지정하고 T는 통합 보안을 사용하여 신뢰할 수 있는 연결을 지정하는 데 사용합니다. 명령 프롬프트에서 다음 명령을 입력합니다.

bcp TestDatabase.dbo.myChar format nul -f D:\BCP\myChar.fmt -T -c 

REM Review file
Notepad D:\BCP\myChar.fmt

Important

비 XML 서식 파일이 캐리지 리턴\줄 바꿈으로 끝나는지 확인합니다. 그러지 않으면 다음과 같은 오류 메시지가 표시될 수 있습니다.

SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file

아래 예제에서는 위에서 만든 데이터베이스와 서식 파일을 사용합니다.

bcp 및 문자 형식을 사용하여 데이터 내보내기

-c 스위치 및 OUT 명령. 참고: 이 예제에서 만든 데이터 파일은 모든 후속 예제에서 사용됩니다. 명령 프롬프트에서 다음 명령을 입력합니다.

bcp TestDatabase.dbo.myChar OUT D:\BCP\myChar.bcp -T -c

REM Review results
NOTEPAD D:\BCP\myChar.bcp

bcp 및 문자 형식을 사용하여 서식 파일 없이 데이터 가져오기

-c 스위치 및 IN 명령. 명령 프롬프트에서 다음 명령을 입력합니다.

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myChar;"

REM Import data
bcp TestDatabase.dbo.myChar IN D:\BCP\myChar.bcp -T -c

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myChar;"

bcp 및 문자 형식을 사용하여 비 XML 서식 파일과 함께 데이터 가져오기

-c-f 스위치와 IN 명령. 명령 프롬프트에서 다음 명령을 입력합니다.

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myChar;"

REM Import data
bcp TestDatabase.dbo.myChar IN D:\BCP\myChar.bcp -f D:\BCP\myChar.fmt -T

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myChar;"

서식 파일 없이 BULK INSERT 및 문자 형식 사용

DATAFILETYPE 인수. Microsoft SSMS(SQL Server Management Studio)에서 다음 TRANSACT-SQL을 실행합니다.

TRUNCATE TABLE TestDatabase.dbo.myChar; -- for testing
BULK INSERT TestDatabase.dbo.myChar
	FROM 'D:\BCP\myChar.bcp'
	WITH (
		DATAFILETYPE = 'Char'
		);

-- review results
SELECT * FROM TestDatabase.dbo.myChar;

비 XML 서식 파일과 함께 BULK INSERT 및 문자 형식 사용

FORMATFILE 인수. Microsoft SSMS(SQL Server Management Studio)에서 다음 TRANSACT-SQL을 실행합니다.

TRUNCATE TABLE TestDatabase.dbo.myChar; -- for testing
BULK INSERT TestDatabase.dbo.myChar
   FROM 'D:\BCP\myChar.bcp'
   WITH (
		FORMATFILE = 'D:\BCP\myChar.fmt'
		);

-- review results
SELECT * FROM TestDatabase.dbo.myChar;

비 XML 서식 파일과 함께 OPENROWSET 및 문자 형식 사용하기

FORMATFILE 인수. Microsoft SSMS(SQL Server Management Studio)에서 다음 TRANSACT-SQL을 실행합니다.

TRUNCATE TABLE TestDatabase.dbo.myChar;  -- for testing
INSERT INTO TestDatabase.dbo.myChar
	SELECT *
	FROM OPENROWSET (
		BULK 'D:\BCP\myChar.bcp', 
		FORMATFILE = 'D:\BCP\myChar.fmt'  
		) AS t1;

-- review results
SELECT * FROM TestDatabase.dbo.myChar;

대량 가져오기 또는 대량 내보내기를 위한 데이터 형식을 사용하려면

참고 항목

bcp 유틸리티
BULK INSERT(Transact-SQL)
OPENROWSET(Transact-SQL)
데이터 형식(Transact-SQL)
SQL Server 이전 버전으로부터 기본 및 문자 형식 데이터 가져오기