다음을 통해 공유


XML 형식 파일(SQL Server)

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

SQL Server에서는 데이터를 SQL Server 테이블에 대량으로 가져오는 데 사용할 수 있는 XML 서식 파일을 작성하는 구문을 정의하는 XML 스키마를 제공합니다. XML 서식 파일은 XSDL(XML 스키마 정의 언어)에 정의된 이 스키마를 준수해야 합니다. XML 서식 파일은 SQL Server 도구를 SQL Server Native Client와 함께 설치한 경우에만 지원됩니다.

bcp 명령, BULK INSERT 문 또는 INSERT ... SELECT * FROM OPENROWSET(BULK...) 문과 함께 XML 서식 파일을 사용할 수 있습니다. bcp 명령을 사용하면 테이블에 대한 XML 서식 파일을 자동으로 생성할 수 있습니다. 자세한 내용은 bcp 유틸리티 참조하세요.

비 XML 서식 파일XML 서식 파일의 두 가지 서식 파일 유형을 대량으로 내보내고 가져올 수 있습니다. XML 서식 파일은 비 XML 서식 파일에 대한 유연하고 강력한 대안을 제공합니다. 비 XML 서식 파일에 대한 자세한 내용은 비 XML 서식 파일 사용(SQL Server)참조하세요.

참고

대량 삽입을 비롯한 이 구문은 Azure Synapse Analytics에서 지원되지 않습니다. Azure Synapse Analytics 및 기타 클라우드 데이터베이스 플랫폼 통합에서 Azure Data Factory COPY 문을또는 COPY INTO 및 PolyBase 같은T-SQL 문을 사용하여 데이터 이동을 수행합니다.

XML 형식 파일의 이점

XML 서식 파일 자체 설명이므로 쉽게 읽고 만들고 확장할 수 있습니다. 사용자가 읽을 수 있으므로 대량 작업 중에 데이터가 해석되는 방식을 쉽게 이해할 수 있습니다.

XML 형식 파일에는 대상 열의 데이터 형식이 포함됩니다. XML 인코딩은 데이터 파일의 데이터 형식과 데이터 요소는 물론 데이터 요소와 테이블 열 간의 매핑을 명확하게 설명합니다.

이를 통해 데이터가 데이터 파일에 표시되는 방식과 파일의 각 필드와 연결된 데이터 형식을 구분할 수 있습니다. 예를 들어 데이터 파일에 데이터의 문자 표현이 포함되어 있으면 해당 SQL 열 형식이 손실됩니다.

XML 서식 파일을 사용하면 데이터 파일에서 단일 LOB(Large Object) 데이터 형식이 포함된 필드를 로드할 수 있습니다.

XML 서식 파일은 이전 버전과 호환되면서 향상될 수 있습니다. 또한 XML 인코딩 명확성으로 인해 지정된 데이터 파일의 형식 파일을 간편하게 여러 개 만들 수 있습니다. 이는 데이터 필드의 전부 또는 일부를 다른 테이블이나는 뷰의 열에 매핑해야 하는 경우에 유용합니다.

XML 구문은 작업 방향과 독립적입니다. 즉, 대량 내보내기와 대량 가져오기의 구문은 동일합니다.

XML 형식 파일을 사용하여 데이터를 테이블이나 분할되지 않은 뷰로 대량으로 가져오고 데이터를 대량으로 내보낼 수 있습니다.

대상 테이블을 지정하는 OPENROWSET(BULK...) 함수의 경우 선택 사항입니다. 함수에서 XML 서식 파일을 사용하여 데이터 파일에서 데이터를 읽기 때문입니다.

참고

대상 테이블은 bcp 명령과 대상 테이블 열을 사용하여 형식 변환을 수행하는 BULK INSERT 문을 사용하여 필요합니다.

XML 서식 파일의 구조

비 XML 서식 파일과 마찬가지로 XML 서식 파일은 데이터 파일의 데이터 필드 형식과 구조를 정의하고 이러한 데이터 필드를 단일 대상 테이블의 열에 매핑합니다.

XML 형식 파일에는 <RECORD><ROW>두 가지 주요 구성 요소가 있습니다.

  • <RECORD> 데이터 파일에 저장된 데이터를 설명합니다.

    <RECORD> 요소에는 하나 이상의 <FIELD> 요소 집합이 포함되어 있습니다. 이러한 요소는 데이터 파일의 필드에 해당합니다. 기본 구문은 다음과 같습니다.

    <RECORD>
        <FIELD .../> [ ...n ]
    </RECORD>
    

    <FIELD> 요소는 특정 데이터 필드의 내용을 설명합니다. 필드 하나는 테이블의 열 하나에만 매핑될 수 있습니다. 모든 필드를 열에 매핑할 필요는 없습니다.

    데이터 파일의 필드는 고정/가변 길이나 문자 종료 중 하나일 수 있습니다. 필드 값 문자(싱글 바이트 표현 사용), 와이드 문자(유니코드 2 바이트 표현 사용), 네이티브 데이터베이스 형식 또는 파일 이름으로 나타낼 수 있습니다. 필드 값이 파일 이름으로 표시되면 파일 이름은 대상 테이블의 BLOB 열 값이 포함된 파일을 가리킵니다.

  • <ROW> 파일의 데이터를 SQL Server 테이블로 가져올 때 데이터 파일에서 데이터 행을 생성하는 방법을 설명합니다.

    <ROW> 요소에는 <COLUMN> 요소 집합이 포함되어 있습니다. 이러한 요소는 테이블 열에 해당합니다. 기본 구문은 다음과 같습니다.

    <ROW>
        <COLUMN .../> [ ...n ]
    </ROW>
    

    <COLUMN> 요소는 데이터 파일의 한 필드에만 매핑할 수 있습니다. <ROW> 요소 내의 <COLUMN> 요소 순서는 대량 작업에서 반환하는 순서를 결정합니다. XML 서식 파일은 각 <COLUMN> 요소에 대량 가져오기 작업의 대상 테이블에 있는 열과 아무런 관계가 없는 로컬 이름을 할당합니다.

XML 서식 파일의 스키마 구문

이 섹션에서는 XML 서식 파일에 대한 XML 스키마의 요소와 특성을 간략하게 설명합니다. 서식 파일 구문은 작업 방향과 독립적입니다. 즉, 대량 내보내기와 대량 가져오기의 구문은 동일합니다. 또한 이 섹션에서는 대량 가져오기에서 <ROW><COLUMN> 요소를 사용하는 방법과 요소의 xsi:type 값을 데이터 집합에 배치하는 방법을 고려합니다.

구문이 실제 XML 형식 파일과 일치하는지 보려면 예제 XML 형식 파일을 참조하세요.

참고

필드의 번호 또는 주문이 테이블 열의 번호 또는 순서와 다른 데이터 파일에서 대량 가져오기를 수행할 수 있도록 서식 파일을 수정할 수 있습니다. 자세한 내용은 데이터 가져오기 또는 내보내기 파일 서식(SQL Server)참조하세요.

XML 스키마의 기본 구문

이러한 구문 문은 요소(<BCPFORMAT>, <RECORD>, <FIELD>, <ROW><COLUMN>) 및 해당 기본 특성만 표시합니다.

참고

<FIELD> 또는 <COLUMN> 요소의 xsi:type 값과 연결된 추가 특성은 이 문서의 뒷부분에 설명되어 있습니다.

스키마 요소

이 섹션에서는 XML 스키마가 XML 서식 파일에 정의하는 각 요소의 용도를 요약합니다. 특성은 이 문서의 뒷부분에 나오는 별도의 섹션에서 설명합니다.

  • <BCPFORMAT>

    지정된 데이터 파일의 레코드 구조와 테이블 행의 열에 대한 대응을 정의하는 형식 파일 요소입니다.

  • <RECORD .../>

    하나 이상의 <FIELD> 요소를 포함하는 복합 요소를 정의합니다. 서식 파일에서 필드가 선언되는 순서는 이들 필드가 데이터 파일에 나열되는 순서입니다.

  • <FIELD .../>

    데이터가 포함된 데이터 파일의 필드를 정의합니다. 이 요소의 특성에 대해서는 이 문서의 뒷부분에 있는 <FIELD> 요소 특성에서 설명합니다.

  • <ROW .../>

    하나 이상의 <COLUMN> 요소를 포함하는 복합 요소를 정의합니다. <COLUMN> 요소의 순서는 RECORD 정의에서 <FIELD> 요소의 순서와 독립적입니다. 대신 서식 파일의 <COLUMN> 요소 순서에 따라 결과 행 집합의 열 순서가 결정됩니다. 데이터 필드는 해당 <COLUMN> 요소가 <COLUMN> 요소에 선언되는 순서대로 로드됩니다. 자세한 내용은 이 문서의 뒷부분에 있는 대량 가져오기에서 <ROW> 요소사용하는 방법을 참조하세요.

  • <COLUMN>

    열을 요소(<COLUMN>)로 정의합니다. 각 <COLUMN> 요소는 <FIELD> 요소에 해당합니다(해당 ID는 <COLUMN> 요소의 SOURCE 특성에 지정됨). 이 요소의 특성에 대한 설명은 이 문서의 뒷부분에 있는 <COLUMN> 요소 특성에서 다루고 있습니다. 또한, 이 문서의 후반부에 나오는 을 참조하여 대량 가져오기가 <COLUMN> 요소를 어떻게 사용하는지 확인하십시오.

  • </BCPFORMAT>

    서식 파일을 종료하는 데 필요합니다.

<FIELD> 요소의 특성

이 섹션에서는 다음 스키마 구문에 요약된 <FIELD> 요소의 특성을 설명합니다.

<FIELD
ID ="fieldID"
xsi:type ="fieldType"
[ LENGTH ="n" ]
[ PREFIX_LENGTH ="p" ]
[ MAX_LENGTH ="m" ]
[ COLLATION ="collationName" ]
[ TERMINATOR ="terminator" ]
/>

<FIELD> 요소는 다른 요소와 독립적입니다. 필드는 다음 속성을 기준으로 설명됩니다.

FIELD 속성 설명 선택 사항/
필수
ID="fieldID" 데이터 파일에 있는 필드의 논리적 이름을 지정합니다. 필드 ID는 필드를 참조하는 데 사용되는 키입니다.

<FIELD ID="fieldID" /> maps to <COLUMN SOURCE="fieldID" />
필수
xsi:type="fieldType" 요소 인스턴스의 형식을 식별하는 XML 구문(특성처럼 사용됨)입니다. fieldType 값은 지정된 인스턴스에 필요한 선택적 특성 중 어느 것이 결정되는지 결정합니다. 필수(데이터 형식에 따라 다름)
LENGTH="n" 이 특성은 고정 길이 데이터 형식의 인스턴스 길이를 정의합니다.

n 값은 양의 정수여야 합니다.
xsi:type 값에 필요한 경우가 아니면 선택 사항입니다.
PREFIX_LENGTH="p" 이 특성은 이진 데이터 표현의 접두사 길이를 정의합니다. PREFIX_LENGTH, p는 다음 값 중 하나여야 합니다: 1, 2, 4, 또는 8. xsi:type 값에 필요한 경우가 아니면 선택 사항입니다.
MAX_LENGTH="m" 이 특성은 지정된 필드에 저장할 수 있는 최대 바이트 수입니다. 대상 테이블이 없으면 열 최대 길이를 알 수 없습니다. MAX_LENGTH 특성은 출력 문자 열의 최대 길이를 제한하여 열 값에 할당된 스토리지를 제한합니다. SELECT FROM 절에서 OPENROWSET 함수의 BULK 옵션을 사용할 때 특히 편리합니다.

m 값은 양의 정수여야 합니다. 기본적으로 최대 길이는 char 열의 경우 8,000자, nchar 열의 경우 4,000자입니다.
선택 사항
COLLATION="collationName" COLLATION 문자 필드에만 허용됩니다. SQL Server 데이터 정렬 이름 목록은 SQL Server 데이터 정렬 이름참조하세요. 선택 사항
TERMINATOR="종결자" 이 특성은 데이터 필드의 종결자를 지정합니다. 종결 문자는 어떤 문자든 될 수 있습니다. 종료자는 데이터에 포함되지 않은 고유한 문자여야 합니다.

기본적으로 필드 종결자는 탭 문자(\t)입니다. 단락 표시를 나타내려면 \r\n사용합니다.
이 속성은 문자 데이터의 xsi:type 경우에만 사용되며, 이 속성을 필요로 합니다.

  • xsi:type 값의 <FIELD> 요소

    xsi:type 값은 요소 인스턴스의 데이터 형식을 식별하는 XML 구문(특성처럼 사용됨)입니다. 자세한 내용은 이 문서의 데이터 집합 섹션에 xsi:type 값 배치 참조하세요.

    <FIELD> 요소의 xsi:type 값은 다음 데이터 형식을 지원합니다.

    <FIELD> xsi:type 필수 XML 특성
    데이터 형식의 경우
    선택적 XML 특성
    데이터 형식의 경우
    NativeFixed LENGTH 없음
    NativePrefix PREFIX_LENGTH MAX_LENGTH
    CharFixed LENGTH COLLATION
    NCharFixed LENGTH COLLATION
    CharPrefix PREFIX_LENGTH MAX_LENGTH, COLLATION
    NCharPrefix PREFIX_LENGTH MAX_LENGTH, COLLATION
    CharTerm TERMINATOR MAX_LENGTH, COLLATION
    NCharTerm TERMINATOR MAX_LENGTH, COLLATION

    SQL Server 데이터 형식에 대한 자세한 내용은 데이터 형식참조하세요.

  • <COLUMN> 요소 특성

    이 섹션에서는 다음 스키마 구문에 요약된 <COLUMN> 요소의 특성을 설명합니다.

    <COLUMN
    SOURCE = "fieldID"
    NAME = "columnName"
    xsi:type = "columnType"
    [ LENGTH = "n" ]
    [ PRECISION = "n" ]
    [ SCALE = "value" ]
    [ NULLABLE = { "YES" | "NO" } ]
    />
    

    필드는 다음 특성을 사용하여 대상 테이블의 열에 매핑됩니다.

    COLUMN 특성 설명 선택 사항/
    필수
    SOURCE="fieldID" 열에 매핑되는 필드의 ID를 지정합니다.

    <COLUMN SOURCE=fieldID"/> maps to <FIELD ID=fieldID"/>
    필수
    NAME="columnName" 서식 파일에서 표시하는 행 집합의 열 이름을 지정합니다. 이 열 이름은 결과 집합의 열을 식별하는 데 사용되며 대상 테이블에 사용되는 열 이름과 일치하지 않아도 됩니다. 필수
    xsi:type="ColumnType" 요소 인스턴스의 데이터 형식을 식별하는 XML 구문(특성처럼 사용됨)입니다. ColumnType 값은 지정된 인스턴스에 필요한 선택적 특성 결정합니다.

    참고:ColumnType 및 관련 특성의 가능한 값은 <COLUMN> 요소 섹션의 xsi:type 값에 있는 <COLUMN> 요소 테이블에 나열됩니다.
    선택 사항
    길이= "n" 고정 길이 데이터 형식의 인스턴스 길이를 정의합니다. LENGTH xsi:type 문자열 데이터 형식인 경우에만 사용됩니다.

    n 값은 양의 정수여야 합니다.
    선택 사항(xsi:type 문자열 데이터 형식인 경우에만 사용 가능)
    PRECISION="n" 숫자의 전체 자릿수를 나타냅니다. 예를 들어, 숫자 123.45는 정밀도가 5입니다.

    값은 양의 정수 여야 합니다.
    선택 사항(xsi:type 가변 숫자 데이터 형식인 경우에만 사용 가능)
    SCALE="int" 숫자에서 소수점 오른쪽에 있는 자릿수를 나타냅니다. 예를 들어 123.45의 소수 자릿수는 2입니다.

    값은 정수여야 합니다.
    선택 사항(xsi:type 가변 숫자 데이터 형식인 경우에만 사용 가능)
    NULLABLE={ "YES" | "NO" } 열에서 NULL 값을 가정할 수 있는지 여부를 나타냅니다. 이 특성은 FIELDS으로부터 독립적입니다. 그러나 열이 null을 허용하지 않고 필드가 NULL 지정하는 경우(값을 지정하지 않음) 런타임 오류가 발생합니다.

    NULLABLE 특성은 일반 SELECT FROM OPENROWSET(BULK...) 문을 수행하는 경우에만 사용됩니다.
    선택 사항(모든 데이터 형식에 사용 가능)

  • <COLUMN> 요소 xsi:type

    xsi:type 값은 요소 인스턴스의 데이터 형식을 식별하는 XML 구문(특성처럼 사용됨)입니다. 이 섹션의 뒷부분에 있는 "데이터 집합에 xsi:type 값 배치"를 사용하는 방법에 대한 자세한 내용을 확인하세요.

    <COLUMN> 요소는 다음과 같이 네이티브 SQL 데이터 형식을 지원합니다.

    유형 범주 <COLUMN> 데이터 형식 필수 XML 특성
    데이터 형식의 경우
    선택적 XML 특성
    데이터 형식의 경우
    고정 SQLBIT, SQLTINYINT, SQLSMALLINT, SQLINT, SQLBIGINT, SQLFLT4, SQLFLT8, SQLDATETIME, SQLDATETIM4, SQLDATETIM8, SQLMONEY, SQLMONEY4, SQLVARIANTSQLUNIQUEID 없음 NULLABLE
    변수 번호 SQLDECIMALSQLNUMERIC 없음 NULLABLE, PRECISION, SCALE
    변수 날짜 및 시간 SQLDATETIME2, SQLTIME, SQLDATETIMEOFFSET 없음 NULLABLE, SCALE
    LOB SQLIMAGE, CharLOB, SQLTEXTSQLUDT 없음 NULLABLE
    문자 LOB SQLNTEXT 없음 NULLABLE
    이진 문자열 SQLBINARYSQLVARYBIN 없음 NULLABLE, LENGTH
    문자열 SQLCHAR, SQLVARYCHAR, SQLNCHARSQLNVARCHAR 없음 NULLABLE, LENGTH

    중요한

    SQLXML 데이터를 대량으로 내보내거나 가져오려면 형식 파일에서 SQLCHAR 또는 SQLVARYCHAR(데이터가 클라이언트 코드 페이지 또는 데이터 정렬에 내포된 코드 페이지에서 전송됨), SQLNCHAR 또는 SQLNVARCHAR(데이터가 유니코드로 전송됨) 또는 SQLBINARY 또는 SQLVARYBIN(데이터는 변환 없이 전송됨) 중 하나를 사용합니다.

    SQL Server 데이터 형식에 대한 자세한 내용은 데이터 형식참조하세요.

대량 가져오기에서 <ROW> 요소를 사용하는 방법

<ROW> 요소는 일부 컨텍스트에서 무시됩니다. <ROW> 요소가 대량 가져오기 작업에 영향을 주는지 여부는 작업이 수행되는 방식에 따라 달라집니다.

  • bcp 명령

    데이터가 대상 테이블에 로드되면 bcp<ROW> 구성 요소를 무시합니다. 대신 bcp 는 대상 테이블의 열 유형을 기반으로 하는 데이터를 로드합니다.

  • Transact-SQL 문(BULK INSERTOPENROWSET의 대량 행세트 제공자)

    데이터를 테이블로 대량으로 가져올 때 Transact-SQL 문은 <ROW> 구성 요소를 사용하여 입력 행 집합을 생성합니다. 또한 Transact-SQL 문은 <ROW> 아래에 지정된 열 형식 및 대상 테이블의 해당 열에 따라 적절한 형식 변환을 수행합니다. 서식 파일과 대상 테이블에 지정된 열 형식이 일치하지 않으면 추가 형식 변환이 발생합니다. 이 추가 형식 변환은 bcp비해 BULK INSERT 또는 OPENROWSET대량 행 집합 공급자의 동작에서 약간의 불일치(즉 정밀도 손실)로 이어질 수 있습니다.

    <ROW> 요소의 정보를 사용하면 추가 정보 없이 행을 생성할 수 있습니다. 이러한 이유로 SELECT 문(SELECT * FROM OPENROWSET(BULK <data-file> FORMATFILE=<xml-format-file>)을 사용하여 행 집합을 생성할 수 있습니다.

    OPENROWSET BULK 절에는 서식 파일이 필요합니다. 필드의 데이터 형식에서 열의 데이터 형식으로 변환하는 작업은 XML 서식 파일에서만 사용할 수 있습니다.

대량 가져오기에서 <COLUMN> 요소를 사용하는 방법

데이터를 테이블로 대량으로 가져오기 위해 서식 파일의 <COLUMN> 요소는 다음을 지정하여 데이터 파일 필드를 테이블 열에 매핑합니다.

  • 데이터 파일의 행 내에 있는 각 필드의 위치입니다.

  • 필드 데이터 형식을 원하는 열 데이터 형식으로 변환하는 데 사용되는 열 형식입니다.

필드에 매핑된 열이 없으면 필드가 생성된 행에 복사되지 않습니다. 이 동작을 통해 데이터 파일에서 서로 다른 테이블에서 열이 여러 개 있는 행을 생성할 수 있습니다.

마찬가지로 테이블에서 데이터를 대량으로 내보내는 경우 형식 파일의 각 <COLUMN> 입력 테이블 행의 열을 출력 데이터 파일의 해당 필드에 매핑합니다.

데이터 집합에 xsi:type 값 배치

XSD(XML 스키마 정의) 언어를 통해 XML 문서의 유효성을 검사하는 경우 xsi:type 값이 데이터 집합에 저장되지 않습니다. 그러나 다음 코드 조각과 같이 XML 서식 파일을 XML 문서(예: myDoc)에 로드하여 데이터 집합에 xsi:type 정보를 넣을 수 있습니다.

...;
myDoc.LoadXml(xmlFormat);
XmlNodeList ColumnList = myDoc.GetElementsByTagName("COLUMN");
for (int i = 0; i < ColumnList.Count; i++)
{
    Console.Write($"COLUMN: xsi:type={ColumnList[i].Attributes["type",
        "http://www.w3.org/2001/XMLSchema-instance"].Value}\n");
}

예제 XML 형식 파일

이 섹션에는 Adventure Works 예제를 포함하여 다양한 경우에 XML 형식 파일을 사용하는 방법에 대한 정보가 포함되어 있습니다.

참고

다음 예의 데이터 파일에서 <tab> 은 데이터 파일의 탭 문자를 나타내며 <return> 은 캐리지 리턴을 나타냅니다.

예제에서는 다음과 같이 XML 서식 파일을 사용하는 주요 측면을 보여줍니다.

서식 파일을 만드는 방법은 서식 파일 만들기(SQL Server)를 참조하세요.

A. 테이블 열과 동일하게 문자 데이터 필드 정렬

다음 예에서는 3개의 문자 데이터 필드가 포함된 데이터 파일을 설명하는 XML 서식 파일을 보여 줍니다. 서식 파일은 데이터 파일을 열 3개가 포함된 테이블에 매핑합니다. 데이터 필드는 테이블의 열과 일대일로 일치합니다.

  • 테이블(행):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • 데이터 파일(레코드):Age<tab>FirstName<tab>LastName<return>

다음 XML 서식 파일은 데이터 파일의 데이터를 테이블로 읽어 옵니다.

<RECORD> 요소에서 서식 파일은 필드 3개 모두의 데이터 값을 문자 데이터로 나타냅니다. 필드마다 TERMINATOR 특성은 데이터 값 다음에 오는 종결자를 나타냅니다.

데이터 필드는 테이블의 열과 일대일로 일치합니다. <ROW> 요소에서 서식 파일은 Age 열을 첫 번째 필드에, FirstName 열을 두 번째 필드에, LastName 열을 세 번째 필드에 매핑합니다.

<?xml version="1.0"?>
<BCPFORMAT
    xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <RECORD>
        <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="12" />
        <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="20" COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n"
            MAX_LENGTH="30"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT" />
        <COLUMN SOURCE="2" NAME="firstname" xsi:type="SQLVARYCHAR" />
        <COLUMN SOURCE="3" NAME="lastname" xsi:type="SQLVARYCHAR" />
    </ROW>
</BCPFORMAT>

참고

해당하는 AdventureWorks2022 예제는 서식 파일 만들기(SQL Server)를 참조하세요.

B. 데이터 필드와 테이블 열을 서로 다르게 정렬

다음 예에서는 3개의 문자 데이터 필드가 포함된 데이터 파일을 설명하는 XML 서식 파일을 보여 줍니다. 서식 파일은 데이터 파일을 데이터 파일의 필드와 다르게 정렬되는 열 3개가 포함된 테이블에 매핑합니다.

  • 테이블(행):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • 데이터 파일(레코드):Age<tab>FirstName<tab>LastName<return>

<RECORD> 요소에서 서식 파일은 필드 3개 모두의 데이터 값을 문자 데이터로 나타냅니다.

<ROW> 요소에서 서식 파일은 Age 열을 첫 번째 필드에, FirstName 열을 세 번째 필드에, LastName 열을 두 번째 필드에 매핑합니다.

<?xml version="1.0"?>
<BCPFORMAT
    xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <RECORD>
        <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="12" />
        <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="20"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n"
            MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT" />
        <COLUMN SOURCE="3" NAME="firstname" xsi:type="SQLVARYCHAR" />
        <COLUMN SOURCE="2" NAME="lastname" xsi:type="SQLVARYCHAR" />
    </ROW>
</BCPFORMAT>

참고

해당하는 AdventureWorks2022 예제는 서식 파일을 사용하여 테이블 열을 데이터 파일 필드에 매핑(SQL Server)을 참조하세요.

C. 데이터 필드 생략

다음 예에서는 4개의 문자 데이터 필드가 포함된 데이터 파일을 설명하는 XML 서식 파일을 보여 줍니다. 서식 파일은 데이터 파일을 열 3개가 포함된 테이블에 매핑합니다. 두 번째 데이터 필드는 테이블 열에 해당하지 않습니다.

  • 테이블(행):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • 데이터 파일(레코드):Age<tab>FirstName<tab>LastName<return>

<RECORD> 요소에서 서식 파일은 필드 4개 모두의 데이터 값을 문자 데이터로 나타냅니다. 필드마다 TERMINATOR 특성은 데이터 값 다음에 오는 종결자를 나타냅니다.

<ROW> 요소에서 서식 파일은 Age 열을 첫 번째 필드에, FirstName 열을 세 번째 필드에, LastName 열을 네 번째 필드에 매핑합니다.

<?xml version="1.0"?>
<BCPFORMAT
    xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <RECORD>
        <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="12" />
        <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="10"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="20"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n"
            MAX_LENGTH="30"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT" />
        <COLUMN SOURCE="3" NAME="firstname" xsi:type="SQLVARYCHAR" />
        <COLUMN SOURCE="4" NAME="lastname" xsi:type="SQLVARYCHAR" />
    </ROW>
</BCPFORMAT>

참고

해당하는 AdventureWorks2022 예제는 서식 파일을 사용하여 데이터 필드 건너뛰기(SQL Server)를 참조하세요.

D. <FIELD> xsi:type을 <COLUMN> xsi:type에 매핑

다음 예제에서는 다양한 유형의 필드와 열에 매핑을 보여줍니다.

<?xml version="1.0"?>
<BCPFORMAT
    xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <RECORD>
        <FIELD xsi:type="CharTerm" ID="C1" TERMINATOR="\t"
            MAX_LENGTH="4" />
        <FIELD xsi:type="CharFixed" ID="C2" LENGTH="10"
            COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="CharPrefix" ID="C3" PREFIX_LENGTH="2"
            MAX_LENGTH="32" COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="NCharTerm" ID="C4" TERMINATOR="\t"
            MAX_LENGTH="4" />
        <FIELD xsi:type="NCharFixed" ID="C5" LENGTH="10"
            COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="NCharPrefix" ID="C6" PREFIX_LENGTH="2"
            MAX_LENGTH="32" COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="NativeFixed" ID="C7" LENGTH="4" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="C1" NAME="Age" xsi:type="SQLTINYINT" />
        <COLUMN SOURCE="C2" NAME="FirstName" xsi:type="SQLVARYCHAR"
            LENGTH="16" NULLABLE="NO" />
        <COLUMN SOURCE="C3" NAME="LastName" />
        <COLUMN SOURCE="C4" NAME="Salary" xsi:type="SQLMONEY" />
        <COLUMN SOURCE="C5" NAME="Picture" xsi:type="SQLIMAGE" />
        <COLUMN SOURCE="C6" NAME="Bio" xsi:type="SQLTEXT" />
        <COLUMN SOURCE="C7" NAME="Interest" xsi:type="SQLDECIMAL"
            PRECISION="5" SCALE="3" />
    </ROW>
</BCPFORMAT>

E. XML 데이터를 테이블에 매핑

다음 예에서는 두 개의 빈 열을 가진 테이블(t_xml)을 만듭니다. 테이블의 첫 번째 열은 int 데이터 형식에, 두 번째 열은 xml 데이터 형식에 매핑됩니다.

CREATE TABLE t_xml (c1 INT, c2 XML);

다음 XML 서식 파일은 데이터 파일을 t_xml 테이블에 로드합니다.

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <RECORD>
        <FIELD ID="1" xsi:type="NativePrefix" PREFIX_LENGTH="1" />
        <FIELD ID="2" xsi:type="NCharPrefix" PREFIX_LENGTH="8" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="c1" xsi:type="SQLINT" />
        <COLUMN SOURCE="2" NAME="c2" xsi:type="SQLNCHAR" />
    </ROW>
</BCPFORMAT>

F. 고정 길이 또는 고정 너비 필드 가져오기

다음 예제에서는 10 또는 6 문자 각각의 고정 필드를 설명합니다. 서식 파일은 이러한 필드 길이/너비를 각각 LENGTH="10"LENGTH="6"으로 나타냅니다. 데이터 파일의 모든 행은 캐리지 리턴 라인 피드 조합(<CR><LF>)으로 끝나며, 서식 파일에서는 이를 TERMINATOR="\r\n"로 나타냅니다.

<?xml version="1.0"?>
<BCPFORMAT
    xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <RECORD>
        <FIELD ID="1" xsi:type="CharFixed" LENGTH="10" />
        <FIELD ID="2" xsi:type="CharFixed" LENGTH="6" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="C1" xsi:type="SQLINT" />
        <COLUMN SOURCE="2" NAME="C2" xsi:type="SQLINT" />
    </ROW>
</BCPFORMAT>

추가 예시

비 XML 서식 파일과 XML 서식 파일의 더 많은 예제는 다음 문서를 참조하세요.