데이터를 가져오거나 내보내기 위해 유니코드 네이티브 형식 사용(SQL Server)

적용 대상:SQL ServerAzure SQL 데이터베이스Azure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System(PDW)

유니코드 원시 형식은 정보를 한 Microsoft SQL Server 설치에서 다른 설치로 복사해야 하는 경우에 유용합니다. 문자가 아닌 데이터에 원시 형식을 사용하면 시간이 절약되며 데이터 형식을 문자 형식으로 변환할 필요가 없습니다. 모든 문자 데이터에 유니코드 문자 형식을 사용하면 서로 다른 코드 페이지를 사용하여 데이터를 서버 간에 대량 전송하는 동안 확장 문자가 손실되지 않습니다. 모든 대량 가져오기 방법에서 유니코드 원시 형식의 데이터 파일을 읽을 수 있습니다.

확장 또는 DBCS 문자가 포함된 데이터 파일을 사용하여 SQL Server의 여러 인스턴스 간에 데이터를 대량 전송할 때 유니코드 원시 형식을 사용하는 것이 좋습니다. 문자가 아닌 데이터의 경우 유니코드 원시 형식에서는 원시(데이터베이스) 데이터 형식을 사용합니다. char, nchar, varchar, nvarchar, text, varchar(max), nvarchar(max)ntext등의 문자 데이터의 경우 유니코드 네이티브 형식에서는 유니코드 문자 데이터 형식을 사용합니다.

유니코드 원시 형식의 데이터 파일에 SQLVARIANT로 저장된 sql_variant 데이터는 charvarchar 값이 ncharnvarchar로 변환되어 영향을 받은 열에 두 배의 스토리지 공간이 필요하다는 점을 제외하고 네이티브 형식의 데이터 파일과 같은 방법으로 작동합니다. 원래 메타데이터는 유지되며 값은 테이블 열로 대량으로 가져올 때 원래 charvarchar 데이터 형식으로 다시 변환됩니다.

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

유니코드 원시 형식의 명령 옵션

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

유니코드 원시 형식은 다음 명령 옵션에서 지원됩니다.

명령 옵션 설명
bcp -N bcp 유틸리티는 모든 문자가 아닌 데이터에 원시(데이터베이스) 데이터 형식을, 모든 문자(char, nchar, varchar, nvarchar, textntext) 데이터에 유니코드 문자 데이터 형식을 사용하는 유니코드 원시 형식을 사용하도록 합니다.
BULK INSERT DATAFILETYPE ='widenative' 데이터를 대량으로 가져올 때 유니코드 원시 형식을 사용합니다.
OPENROWSET 해당 없음 서식 파일을 사용해야 합니다.

참고 항목

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

예제 테스트 조건

이 주제에 대한 예제는 표와 아래에 정의된 서식 파일을 기반으로 합니다.

샘플 테이블

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

CREATE DATABASE TestDatabase;
GO

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

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

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

샘플 비 XML 서식 파일

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

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

REM Review file
Notepad D:\BCP\myWidenative.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.myWidenative OUT D:\BCP\myWidenative.bcp -T -N

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

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

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

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

REM Import data
bcp TestDatabase.dbo.myWidenative IN D:\BCP\myWidenative.bcp -T -N

REM Review results is SSMS

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

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

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

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

REM Review results is SSMS

서식 파일 없이 BULK INSERT 및 유니코드 원시 형식 사용

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

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

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

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

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

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

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

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

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

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

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

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

참고 항목

bcp 유틸리티
BULK INSERT(Transact-SQL)
OPENROWSET(Transact-SQL)
데이터 형식(Transact-SQL)