적용 대상: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System(PDW)
확장/DBCS 문자가 포함된 데이터 파일을 사용하여 SQL Server의 여러 인스턴스 간에 데이터를 대량 전송할 때 유니코드 문자 형식을 사용하는 것이 좋습니다. 유니코드 문자 데이터 형식을 사용하면 작업을 수행하는 클라이언트에서 사용하는 코드 페이지와 다른 코드 페이지를 사용하여 서버에서 데이터를 내보낼 수 있습니다. 이런 경우 유니코드 문자 형식을 사용하면 다음과 같은 이점이 있습니다.
원본 및 대상 데이터가 유니코드 데이터 형식인 경우 유니코드 문자 형식을 사용하면 모든 문자 데이터가 유지됩니다.
원본 및 대상 데이터가 유니코드 데이터 형식이 아닌 경우 유니코드 문자 형식을 사용하면 대상에서 나타낼 수 없는 원본 데이터의 확장 문자 손실이 최소화됩니다.
유니코드 문자 형식 사용에 대한 고려 사항
유니코드 문자 형식을 사용하는 경우 다음을 고려합니다.
기본적으로 bcp 유틸리티 는 탭 문자로 문자 데이터 필드를 구분하며 줄 바꿈 문자로 레코드를 종료합니다. 대체 종결자를 지정하는 방법에 대한 자세한 내용은 필드 및 행 종결자 지정(SQL Server)을 참조하세요.
유니코드 문자 형식 데이터 파일에 저장된 sql_variant 데이터는 데이터가 char 데이터 대신 nchar로 저장된다는 점을 제외하고 문자 형식 데이터 파일에서 작동하는 방식과 동일한 방식으로 작동합니다. 문자 형식에 대한 자세한 내용은 데이터 정렬 및 유니코드 지원을 참조하세요.
유니코드 문자 형식, bcp 및 서식 파일 사용에 대한 특별 고려 사항
유니코드 문자 형식 데이터 파일은 유니코드 파일 규칙을 따릅니다. 파일의 처음 2바이트는 0xFFFE 16진수입니다. 이러한 바이트는 BOM(바이트 순서 표시) 역할을 하며 상위 바이트가 파일에 첫 번째 또는 마지막으로 저장되는지 여부를 지정합니다. bcp 유틸리티가 BOM을 잘못 해석하여 가져오기 프로세스의 일부가 실패할 수 있습니다. 다음과 유사한 오류 메시지가 표시될 수 있습니다.
Starting copy...
SQLState = 22005, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]Invalid character value for cast specification
BOM은 다음 조건에서 잘못 해석될 수 있습니다.
bcp 유틸리티가 사용되고 스위치가
-w
유니코드 문자를 나타내는 데 사용됩니다.서식 파일을 사용하는 경우
데이터 파일의 첫 번째 필드는 문자가 아닌 필드입니다.
특정 상황에서 다음 해결 방법을 사용할 수 있는지 여부를 고려합니다.
서식 파일을 사용하지 마세요. 이 해결 방법의 예는 bcp 및 유니코드 문자 형식을 사용하여 서식 파일 없이 데이터를 가져오기 위해 제공됩니다.
-c
대신-w
스위치를 사용하세요.원시 형식을 사용하여 데이터를 다시 내보냅니다.
BULK INSERT(Transact-SQL) 또는 OPENROWSET(Transact-SQL)을 사용합니다. 이러한 해결 방법의 예는 XML이 아닌 서식 파일과 함께 BULK INSERT 및 유니코드 문자 형식 을 사용하고 XML이 아닌 서식 파일 섹션에서 OPENROWSET 및 유니코드 문자 형식을 사용하는 방법을 제공합니다.
대상 테이블에 첫 번째 레코드를 수동으로 삽입한 다음 스위치를 사용하여
-F 2
두 번째 레코드에서 가져오기를 시작합니다.데이터 파일에 더미 첫 번째 레코드를 수동으로 삽입한 다음 스위치를 사용하여
-F 2
두 번째 레코드에서 가져오기를 시작합니다. 이 해결 방법의 예는 bcp 및 유니코드 문자 형식을 사용하여 XML이 아닌 서식 파일 섹션이 있는 데이터 가져오기 에 제공됩니다.첫 번째 열이 문자 데이터 형식인 준비 테이블을 사용합니다.
데이터를 다시 내보내고 첫 번째 데이터 필드가 문자가 되도록 데이터 필드 순서를 변경합니다. 그런 다음, 서식 파일을 사용하여 데이터 필드를 테이블의 실제 순서로 다시 매핑합니다. 예를 들어 서식 파일을 사용하여 테이블 열을 데이터 파일 필드(SQL Server)에 매핑하는 방법을 참조하세요.
유니코드 문자 형식에 대한 명령 옵션
bcp, BULK INSERT 또는 OPENROWSET을 사용하여 유니코드 문자 형식 데이터를 테이블로 가져올 수 있습니다. bcp 명령 또는 BULK INSERT 문의 경우 문에서 데이터 형식을 지정할 수 있습니다. OPENROWSET 문의 경우 서식 파일에서 데이터 형식을 지정해야 합니다.
유니코드 문자 형식은 다음 명령 옵션에서 지원됩니다.
명령 | 옵션 | 설명 |
---|---|---|
bcp |
-w |
유니코드 문자 형식을 사용합니다. |
BULK INSERT |
DATAFILETYPE ='widechar' |
데이터를 대량 가져올 때 유니코드 문자 형식을 사용합니다. |
OPENROWSET |
해당 없음 | 서식 파일을 사용해야 합니다. |
주의
또는 서식 파일에서 필드별로 서식을 지정할 수 있습니다. 자세한 내용은 데이터를 가져오거나 내보낼 파일 형식을 참조하세요(SQL Server).
테스트 조건 예제
이 문서의 예제는 다음 표 및 서식 파일을 기반으로 합니다.
샘플 테이블
다음 스크립트는 myWidechar
테이블인 테스트 데이터베이스를 만들고 일부 초기 값으로 테이블을 채웁니다. Microsoft SSMS(SQL Server Management Studio)에서 다음 TRANSACT-SQL을 실행합니다.
CREATE DATABASE TestDatabase;
GO
USE TestDatabase;
CREATE TABLE dbo.myWidechar
(
PersonID SMALLINT NOT NULL,
FirstName NVARCHAR (25) NOT NULL,
LastName NVARCHAR (30) NOT NULL,
BirthDate DATE,
AnnualSalary MONEY
);
-- Populate table
INSERT TestDatabase.dbo.myWidechar
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.myWidechar;
샘플 비 XML 서식 파일
SQL Server 은(는) 두 유형의 서식 파일, 즉 비 XML 서식 파일과 XML 서식 파일을 지원합니다. 비 XML 서식 파일은 이전 버전의 SQL Server에서 원래 지원했던 서식 파일입니다. 자세한 내용은 비 XML 서식 파일 사용(SQL Server)을 참조하세요.
다음 명령은 bcp 유틸리티를 사용하여 스키마myWidechar.fmt
에 따라 비 XML 형식 파일을 myWidechar
생성합니다.
bcp 명령을 사용하여 서식 파일을 만들려면 데이터 파일 경로 대신 format
인수를 지정하고 nul
을 사용합니다. 서식 옵션에는 -f
옵션도 필요합니다. 또한 이 예제에서는 한정자 c
문자 데이터를 지정하는 데 사용되며 T
통합 보안을 사용하여 신뢰할 수 있는 연결을 지정하는 데 사용됩니다. 명령 프롬프트에서 다음 명령을 입력합니다.
bcp TestDatabase.dbo.myWidechar format nul -f D:\BCP\myWidechar.fmt -T -w
REM Review file
Notepad D:\BCP\myWidechar.fmt
중요한
비 XML 서식 파일이 캐리지 리턴\줄 바꿈로 끝나는지 확인합니다. 그렇지 않으면 다음 오류 메시지가 표시될 수 있습니다.
SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file
예시
다음 예제에서는 데이터베이스를 사용하고 이전에 만든 파일의 서식을 지정합니다.
bcp 및 유니코드 문자 형식을 사용하여 데이터 내보내기
-w
스위치와 OUT
명령. 이 예제에서 만든 데이터 파일은 모든 후속 예제에서 사용됩니다. 명령 프롬프트에서 다음 명령을 입력합니다.
bcp TestDatabase.dbo.myWidechar OUT D:\BCP\myWidechar.bcp -T -w
REM Review results
NOTEPAD D:\BCP\myWidechar.bcp
bcp 및 유니코드 문자 형식을 사용하여 서식 파일 없이 데이터 가져오기
-w
스위치와 IN
명령. 명령 프롬프트에서 다음 명령을 입력합니다.
REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myWidechar;"
REM Import data
bcp TestDatabase.dbo.myWidechar IN D:\BCP\myWidechar.bcp -T -w
REM Review results is SSMS
bcp 및 유니코드 문자 형식을 사용하여 비 XML 서식 파일로 데이터 가져오기
-w
및 -f
스위치와 IN
명령. 이 예제에는 bcp, 서식 파일, 유니코드 문자 및 데이터 파일의 첫 번째 데이터 필드가 문자가 아니므로 해결 방법을 사용해야 합니다. 문서 앞부 분에서 유니코드 문자 형식, bcp 및 서식 파일을 사용하기 위한 특별 고려 사항을 참조하세요. 데이터 파일 myWidechar.bcp
에 추가 레코드를 "더미" 레코드로 추가하여 변경한 뒤, -F 2
스위치를 사용하여 건너뛰도록 설정합니다.
명령 프롬프트에서 다음 명령을 입력하고 수정 단계를 수행합니다.
REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myWidechar;"
REM Open data file
Notepad D:\BCP\myWidechar.bcp
REM Copy first record and then paste as new first record. This additional record is the "dummy" record.
REM Close file.
REM Import data instructing bcp to skip dummy record with the -F 2 switch.
bcp TestDatabase.dbo.myWidechar IN D:\BCP\myWidechar.bcp -f D:\BCP\myWidechar.fmt -T -F 2
REM Review results is SSMS
REM Return data file to original state for usage in other examples
bcp TestDatabase.dbo.myWidechar OUT D:\BCP\myWidechar.bcp -T -w
서식 파일 없이 BULK INSERT 및 유니코드 문자 형식 사용
DATAFILETYPE
논쟁. Microsoft SSMS(SQL Server Management Studio)에서 다음 TRANSACT-SQL을 실행합니다.
TRUNCATE TABLE TestDatabase.dbo.myWidechar; -- for testing
BULK INSERT TestDatabase.dbo.myWidechar FROM 'D:\BCP\myWidechar.bcp'
WITH (DATAFILETYPE = 'widechar');
-- review results
SELECT * FROM TestDatabase.dbo.myWidechar;
XML이 아닌 서식 파일과 함께 BULK INSERT 및 유니코드 문자 형식 사용
FORMATFILE
논쟁. Microsoft SSMS(SQL Server Management Studio)에서 다음 TRANSACT-SQL을 실행합니다.
TRUNCATE TABLE TestDatabase.dbo.myWidechar; -- for testing
BULK INSERT TestDatabase.dbo.myWidechar FROM 'D:\BCP\myWidechar.bcp'
WITH (FORMATFILE = 'D:\BCP\myWidechar.fmt');
-- review results
SELECT * FROM TestDatabase.dbo.myWidechar;
비 XML 서식 파일과 함께 OPENROWSET 및 유니코드 문자 형식 사용
FORMATFILE
논쟁. Microsoft SSMS(SQL Server Management Studio)에서 다음 TRANSACT-SQL을 실행합니다.
TRUNCATE TABLE TestDatabase.dbo.myWidechar; -- for testing
INSERT INTO TestDatabase.dbo.myWidechar
SELECT * FROM OPENROWSET (
BULK 'D:\BCP\myWidechar.bcp',
FORMATFILE = 'D:\BCP\myWidechar.fmt'
) AS t1;
-- review results
SELECT * FROM TestDatabase.dbo.myWidechar;
관련 작업
대량 가져오기 또는 대량 내보내기를 위한 데이터 형식을 사용하려면
- 이전 버전의 SQL Server에서 네이티브 및 문자 형식 데이터 가져오기
- 문자 형식을 사용하여 데이터 가져오기 또는 내보내기(SQL Server)
- 원시 형식을 사용하여 데이터 가져오기 또는 내보내기(SQL Server)
- 유니코드 네이티브 형식을 사용하여 데이터 가져오기 또는 내보내기(SQL Server)