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

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

확장/DBCS(더블바이트 문자 집합) 문자가 포함되어 있지 않은 데이터 파일을 사용하여 여러 개의 SQL Server 인스턴스 간에 데이터를 대량 전송할 때는 네이티브 형식을 사용하는 것이 좋습니다.

참고 항목

확장 또는 DBCS 문자가 포함된 데이터 파일을 사용하여 SQL Server의 여러 인스턴스 간에 데이터를 대량 전송하려면 유니코드 네이티브 형식을 사용해야 합니다. 자세한 내용은 유니코드 원시 형식을 사용하여 데이터 가져오기 또는 내보내기(SQL Server)를 참조하세요.

네이티브 형식은 데이터베이스의 원래 데이터 형식을 유지합니다. 네이티브 형식은 SQL Server 테이블 간에 데이터를 고속으로 전송하기 위한 것입니다. 서식 파일을 사용할 경우 원본 및 대상 테이블의 형식이 동일할 필요가 없습니다. 데이터 전송에는 다음 두 단계가 포함됩니다.

  1. 데이터 파일로 원본 테이블의 데이터를 대량으로 내보냅니다.

  2. 데이터 파일에서 대상 테이블로 데이터 대량 가져오기

동일한 테이블 간에 네이티브 형식을 사용하면 문자 형식 간에 불필요한 데이터 형식 변환을 방지하여 시간과 공간을 절약할 수 있습니다. 이때 최적의 전송 속도를 얻기 위해 데이터 형식을 거의 검사하지 않습니다. 로드된 데이터와 관련된 문제를 방지하려면 다음 제한 사항 목록을 참조하십시오.

제한 사항

데이터를 네이티브 형식으로 가져오려면 다음 사항을 확인하십시오.

  • 데이터 파일은 네이티브 형식입니다.

  • 대상 테이블이 데이터 파일(올바른 열 수, 데이터 형식, 길이, NULL 상태 등)과 호환되거나 사용자가 서식 파일을 사용하여 각 필드를 해당 열에 매핑해야 합니다.

    참고 항목

    대상 테이블과 일치하지 않는 파일에서 데이터를 가져오는 경우 가져오기 작업이 성공하더라도 대상 테이블에 삽입된 데이터 값이 올바르지 않을 수 있습니다. 이는 파일의 데이터가 대상 테이블의 형식을 사용하여 해석되기 때문입니다. 따라서 형식이 일치하지 않으면 잘못된 값이 삽입됩니다. 그러나 이러한 불일치로 인해 데이터베이스의 논리적 또는 물리적 불일치가 발생할 수 있는 상황은 없습니다.

    서식 파일 사용에 대한 자세한 내용은 데이터를 가져오거나 내보내기 위한 서식 파일(SQL Server)을 참조하세요.

데이터를 성공적으로 가져온 경우 대상 테이블은 손상되지 않습니다.

bcp의 네이티브 형식 데이터 처리 방법

이 섹션에서는 bcp 유틸리티가 데이터를 네이티브 형식으로 내보내고 가져오는 방법에 대한 특별한 고려 사항을 설명합니다.

  • 비문자 데이터

    bcp 유틸리티는 SQL Server 내부 이진 데이터 형식을 사용하여 테이블의 비문자 데이터를 데이터 파일에 씁니다.

  • char 또는 varchar 데이터

    bcp 는 각 char 또는 varchar 필드의 처음 부분에 접두사 길이를 추가합니다.

    Important

    기본적으로 기본 모드를 사용하는 경우 bcp 유틸리티는 문자를 데이터 파일에 복사하기 전에 SQL Server에서 OEM 문자로 변환합니다. 반대로 데이터 파일의 문자를 SQL Server 테이블에 대량으로 가져올 때는 bcp 유틸리티가 문자를 ANSI 문자로 변환합니다. 이러한 변환 중에 확장 문자 데이터가 손실될 수 있습니다. 확장 문자의 경우 유니코드 네이티브 형식을 사용하거나 코드 페이지를 지정합니다.

  • sql_variant 데이터

    sql_variant 데이터가 네이티브 형식 데이터 파일에 SQLVARIANT로 저장되는 경우 데이터는 모든 특성을 유지합니다. 각 데이터 값의 데이터 형식을 기록하는 메타데이터는 데이터 값과 함께 저장됩니다. 이 메타데이터는 대상 sql_variant 열에 데이터 형식이 동일한 데이터 값을 다시 만드는 데 사용됩니다.

    대상 열의 데이터 형식이 sql_variant가 아닌 경우 기본적인 암시적 데이터 변환 규칙에 따라 각 데이터 값이 대상 열의 데이터 형식으로 변환됩니다. 데이터 변환 중에 오류가 발생하면 현재 일괄 처리가 롤백됩니다. sql_variant 열 간에 전송되는 모든 charvarchar 값에는 코드 페이지 변환 문제가 있을 수 있습니다.

    데이터 변환에 대한 자세한 내용은 데이터 형식 변환(데이터베이스 엔진)을 참조하세요.

네이티브 형식의 명령 옵션

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

다음 명령 옵션에서 네이티브 형식을 사용할 수 있습니다.

명령 옵션 설명
bcp -n bcp 유틸리티가 데이터의 네이티브 데이터 형식을 사용하게 합니다.*
BULK INSERT DATAFILETYPE ='native' 데이터의 네이티브 또는 와이드 네이티브 데이터 형식을 사용합니다. 서식 파일에서 데이터 형식을 지정하는 경우 DATAFILETYPE이 필요하지 않습니다.
OPENROWSET 해당 없음 서식 파일을 사용해야 합니다.

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

참고 항목

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

예제 테스트 조건

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

샘플 테이블

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

CREATE DATABASE TestDatabase;
GO

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

-- Populate table
INSERT TestDatabase.dbo.myNative
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.myNative;

샘플 비 XML 서식 파일

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

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

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

Important

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

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

예제

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

bcp 및 원시 형식을 사용하여 데이터 내보내기

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

bcp TestDatabase.dbo.myNative OUT D:\BCP\myNative.bcp -T -n

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

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

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

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

REM Import data
bcp TestDatabase.dbo.myNative IN D:\BCP\myNative.bcp -T -n

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

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

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

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

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

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

서식 파일 없이 BULK INSERT 및 원시 형식 사용

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

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

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

비 XML 서식 파일과 함께 BULK INSERT 및 원시 형식 사용

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

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

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

비 XML 서식 파일과 함께 OPENROWSET 및 원시 형식 사용

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

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

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

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

참고 항목

bcp 유틸리티
BULK INSERT(Transact-SQL)
데이터 형식(Transact-SQL)
sql_variant(Transact-SQL)
SQL Server 이전 버전으로부터 기본 및 문자 형식 데이터 가져오기
OPENROWSET(Transact-SQL)
데이터를 가져오거나 내보내기 위해 유니코드 네이티브 형식 사용(SQL Server)