서식 파일 소개
특정 테이블과 연관된 데이터 파일의 각 필드에 대한 서식 정보를 저장하는 파일을 서식 파일이라고 합니다. 서식 파일은 데이터를 대량으로 내보내거나 가져올 때 필요한 모든 서식 정보를 제공합니다. 서식 파일을 사용하면 다른 데이터 형식과 맞추기 위한 편집 작업이 거의 필요 없는 데이터 파일을 작성하거나 다른 소프트웨어의 데이터 파일을 읽는 작업을 유연하게 수행할 수 있습니다.
Microsoft SQL Server 2000 및 이전 버전에서는 대량 내보내기 및 가져오기 작업을 단일 유형의 서식 파일로 수행할 수 있었습니다. 이는 계속 지원되지만 SQL Server 2005 이상 버전에서는 XML 서식 파일도 지원합니다. 새로운 서식 파일 유형과 구분하기 위해 원래 유형의 서식 파일을 비 XML 서식 파일이라고 합니다.
모든 서식 파일은 각 데이터 파일의 모든 필드에 대한 설명을 포함하며 XML 서식 파일 역시 대응되는 테이블 열에 대한 설명을 포함합니다. 일반적으로 XML 서식 파일과 비 XML 서식 파일은 서로 전환이 가능하지만 새 서식 파일에는 비 XML 서식 파일에 비해 여러 가지 장점이 있는 XML 구문을 사용하는 것이 좋습니다. XML 서식 파일의 특징은 다음과 같습니다.
자기 설명적이며 읽고 만들고 확장하기 쉽습니다.
대상 열의 데이터 형식을 포함합니다.
이 특성은 데이터 파일에 데이터가 기록된 방식과 파일 내의 각 필드와 연결된 데이터 형식을 달리 지정할 수 있게 해줍니다. 예를 들어 데이터 파일이 데이터의 문자 표시를 포함하면 해당 SQL 열 형식은 무시됩니다.
bcp 명령과 BULK INSERT 문은 대상 테이블 열을 사용하여 형식을 변환하므로 대상 테이블이 필요합니다. 반대로 OPENROWSET(BULK...) 함수는 XML 서식 파일을 사용하여 데이터 파일의 데이터를 읽습니다. 따라서 대상 테이블은 선택 사항입니다.
데이터 파일에서 단일 LOB(Large Object) 데이터 형식을 포함한 필드를 로드할 수 있습니다.
서식 파일의 구문은 작업 방향과는 무관합니다. 즉, 대량 내보내기와 대량 가져오기의 구문은 동일합니다.
각 서식 파일 유형의 레이아웃에 대한 자세한 내용은 이 항목의 뒷부분에 나오는 "예"를 참조하십시오.
서식 파일이 필요한 경우
INSERT ... SELECT * FROM OPENROWSET(BULK...) 문에는 항상 서식 파일이 필요합니다.
- bcp 또는 BULK INSERT의 경우 단순한 상황에서는 필요에 따라 서식 파일을 사용할 수 있으며 필수적인 경우는 많지 않습니다. 그러나 복잡한 대량 가져오기 상황에서는 서식 파일이 필요한 경우가 종종 있습니다.
다음과 같은 경우에 서식 파일이 필요합니다.
동일한 데이터 파일이 스키마가 다른 여러 테이블의 원본으로 사용되는 경우
대상 테이블의 열과 데이터 파일의 필드 개수가 다른 경우. 예를 들면 다음과 같은 경우입니다.
대상 테이블에 기본값이 정의되었거나 NULL이 허용된 열이 최소 하나 이상 포함되어 있는 경우
사용자에게 테이블에 있는 하나 이상의 열에 대한 SELECT/INSERT 권한이 없는 경우
하나의 데이터 파일이 스키마가 다른 둘 이상의 테이블에 사용되는 경우
데이터 파일과 테이블의 열 순서가 다른 경우
데이터 파일의 열 간에 종결 문자나 접두사 길이가 다른 경우
[!참고]
서식 파일이 없는 경우 bcp 명령이 지정한 데이터 형식 스위치(-n, -c, -w, -N) 또는 BULK INSERT 연산에 지정된 DATAFILETYPE 옵션의 데이터 형식을 데이터 파일의 필드를 해석하는 기본 방법으로 사용합니다.
예
다음 예에서는 비 XML 서식 파일 및 XML 서식 파일의 레이아웃을 보여 줍니다. 이러한 서식 파일은 AdventureWorks2008R2 예제 데이터베이스의 HumanResources.myTeam 테이블에 해당합니다. 이 테이블에는 네 개의 열, 즉 EmployeeID, Name, Title 및 ModifiedDate가 있습니다.
[!참고]
이 테이블에 대한 자세한 내용과 테이블을 만드는 방법은 HumanResources.myTeam 테이블 만들기를 참조하십시오.
1. 비 XML 서식 파일 사용
다음 비 XML 서식 파일은 HumanResources.myTeam 테이블에 SQL Server 네이티브 데이터 형식을 사용합니다. 이 서식 파일은 다음 bcp 명령을 사용하여 생성됩니다.
bcp AdventureWorks2008R2.HumanResources.myTeam format nul -f myTeam.Fmt -n -T
The contents of this format file are as follows: 9.0
4
1 SQLSMALLINT 0 2 "" 1 EmployeeID ""
2 SQLNCHAR 2 100 "" 2 Name SQL_Latin1_General_CP1_CI_AS
3 SQLNCHAR 2 100 "" 3 Title SQL_Latin1_General_CP1_CI_AS
4 SQLNCHAR 2 100 "" 4 Background SQL_Latin1_General_CP1_CI_AS
자세한 내용은 비 XML 서식 파일 이해를 참조하십시오.
2. XML 서식 파일 사용
다음 XML 서식 파일은 HumanResources.myTeam 테이블에 SQL Server 네이티브 데이터 형식을 사용합니다. 이 서식 파일은 다음 bcp 명령을 사용하여 생성됩니다.
bcp AdventureWorks2008R2.HumanResources.myTeam format nul -f myTeam.Xml -x -n -T
서식 파일은 다음을 포함합니다.
<?xml version="1.0"?>
<BCPFORMAT xmlns="https://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="NativePrefix" LENGTH="1"/>
<FIELD ID="2" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="3" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="4" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="EmployeeID" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="3" NAME="Title" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="4" NAME="Background" xsi:type="SQLNVARCHAR"/>
</ROW>
</BCPFORMAT>
자세한 내용은 XML 서식 파일 이해를 참조하십시오.