XML 서식 파일의 스키마 구문
이 섹션에서는 XML 서식 파일의 구문에 대해 설명합니다. 구문이 실제 XML 서식 파일과 일치하는지 보려면 XML 서식 파일 샘플을 참조하십시오. 또한 이 섹션에서는 대량 가져오기에서 <ROW> 및 <COLUMN> 요소를 사용하는 방법과 요소의 xsi:type 값을 데이터 집합에 포함시키는 방법에 대해 설명합니다.
XML 서식 파일은 bcp 명령, BULK INSERT 문 또는 INSERT ... SELECT * FROM OPENROWSET(BULK...) 문과 함께 사용할 수 있습니다.
[!참고] 필드와 테이블 열의 번호 또는 순서가 서로 다른 데이터 파일로부터 대량 가져오기를 수행하도록 서식 파일을 수정할 수 있습니다. 자세한 내용은 서식 파일을 사용하여 대량 내보내기 중에 필드를 열에 매핑을 참조하십시오.
XML 스키마의 기본 구문
이 문의 구문에서는 요소(<BCPFORMAT>, <RECORD>, <FIELD>, <ROW>, <COLUMN>) 및 그 기본 특성만 보여 줍니다.
<BCPFORMAT ...>
<RECORD>
<FIELD ID = "fieldID" xsi:type = "fieldType" [...]
/>
</RECORD>
<ROW>
<COLUMN SOURCE = "fieldID" NAME = "columnName" xsi:type = "columnType" [...]
/>
</ROW>
</BCPFORMAT>
[!참고] <FIELD> 또는 <COLUMN> 요소의 xsi:type 값과 연관된 추가 특성은 이 항목의 뒷부분에서 설명합니다.
스키마 요소의 설명
이 섹션에서는 XML 스키마가 XML 서식 파일에 대해 정의하는 각 요소의 목적에 대해 요약합니다. 특성은 뒷부분의 다른 섹션에서 설명합니다.
- <BCPFORMAT>
지정된 데이터 파일의 레코드 구조와 테이블 행의 열과의 일치를 정의하는 서식 파일 요소입니다.
- <RECORD .../>
하나 이상의 <FIELD> 요소를 포함하는 복잡한 요소를 정의합니다. 서식 파일에서 필드가 선언되는 순서는 이들 필드가 데이터 파일에 나열되는 순서입니다.
<FIELD .../>
데이터를 포함하는 데이터 파일의 필드를 정의합니다.이 요소의 특성은 이 항목의 뒷부분에 나오는 "<FIELD> 요소의 특성"에서 설명합니다.
<ROW .../>
하나 이상의 <COLUMN> 요소를 포함하는 복잡한 요소를 정의합니다. <COLUMN> 요소의 순서는 RECORD 정의에 있는 <FIELD> 요소의 순서와는 독립적입니다. 반면, 서식 파일에 있는 <COLUMN> 요소의 순서는 결과 행 집합의 열 순서를 결정합니다. 데이터 필드는 해당 <COLUMN> 요소가 <COLUMN> 요소에서 선언되는 순서대로 로드됩니다.자세한 내용은 뒷부분의 "대량 가져오기의 <ROW> 요소 사용 방법"을 참조하십시오.
<COLUMN>
열을 요소(<COLUMN>)로 정의합니다. 각 <COLUMN> 요소는 ID가 <COLUMN> 요소의 SOURCE 특성에서 지정되는 <FIELD> 요소에 해당합니다.이 요소의 특성은 이 항목의 뒷부분에 나오는 "<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 열의 경우 8000자, nchar 열의 경우 4000자입니다. |
옵션 |
COLLATION ="collationName" |
COLLATION은 문자 필드에서만 사용할 수 있습니다. SQL 데이터 정렬 이름 목록은 SQL 데이터 정렬 이름(Transact-SQL)을 참조하십시오. |
옵션 |
TERMINATOR = "terminator" |
이 특성은 데이터 필드의 종결자를 지정합니다. 종결자는 어떠한 문자도 가능합니다. 종결자는 데이터의 일부가 아닌 고유 문자여야 합니다. 기본적으로 필드 종결자는 탭 문자(\t로 표시)입니다. 단락 기호를 표시하려면 \r\n을 사용하십시오. |
이 특성이 필요한 문자 데이터의 xsi:type에만 사용됩니다. |
<FIELD> 요소의 xsi:type 값
xsi:type 값은 요소 인스턴스의 데이터 형식을 식별하는 XML 구문(특성처럼 사용)입니다. xsi:type 값의 사용 방법은 이 섹션의 뒷부분에 나오는 "데이터 집합에 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 |
Microsoft SQL Server 데이터 형식에 대한 자세한 내용은 데이터 형식(Transact-SQL)을 참조하십시오.
<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의 가능한 값과 이와 연관된 특성은 다음 테이블에 나열되어 있습니다.
옵션
LENGTH ="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와는 독립적입니다. 그러나 열이 NULLABLE이 아닌 경우 필드에서 NULL을 지정하면(아무 값도 지정하지 않음) 런타임 오류가 발생합니다.
옵션(모든 데이터 형식에 사용 가능)
<COLUMN> 요소의 xsi:type 값
xsi:type 값은 요소 인스턴스의 데이터 형식을 식별하는 XML 구문(특성처럼 사용)입니다. xsi:type 값의 사용 방법은 이 섹션의 뒷부분에 나오는 "데이터 집합에 xsi:type 값 넣기"를 참조하십시오.
<COLUMN> 요소는 다음과 같이 네이티브 SQL 데이터 형식을 지원합니다.
형식 범주 | <COLUMN> 데이터 형식 | 데이터 형식의 필수 XML 특성 | 데이터 형식의 옵션 XML 특성 |
---|---|---|---|
고정 |
SQLBIT, SQLTINYINT, SQLSMALLINT, SQLINT, SQLBIGINT, SQLFLT4, SQLFLT8, SQLDATETIME, SQLDATETIM4, SQLDATETIM8, SQLMONEY, SQLMONEY4, SQLVARIANT 및 SQLUNIQUEID |
없음 |
NULLABLE |
가변 숫자 |
SQLDECIMAL 및 SQLNUMERIC |
없음 |
NULLABLE, PRECISION, SCALE |
LOB |
SQLIMAGE, CharLOB, SQLTEXT 및 SQLUDT |
없음 |
NULLABLE |
문자 LOB |
SQLNTEXT |
없음 |
NULLABLE |
이진 문자열 |
SQLBINARY 및 SQLVARYBIN |
없음 |
NULLABLE, LENGTH |
문자열 |
SQLCHAR, SQLVARYCHAR, SQLNCHAR 및 SQLNVARCHAR |
없음 |
NULLABLE, LENGTH |
중요: |
---|
SQLXML 데이터의 대량 내보내기 또는 가져오기를 수행하려면 서식 파일에서 SQLCHAR 또는 SQLVARYCHAR(데이터 정렬에 의해 포함된 코드 페이지나 클라이언트 코드 페이지로 데이터가 전송됨), SQLNCHAR 또는 SQLNVARCHAR(데이터가 유니코드로 전송됨), SQLBINARY 또는 SQLVARYBIN(데이터가 변환되지 않고 전송됨) 데이터 형식 중 하나를 사용합니다. |
SQL Server 데이터 형식에 대한 자세한 내용은 데이터 형식(Transact-SQL)을 참조하십시오.
대량 가져오기에서 <ROW> 요소를 사용하는 방법
<ROW> 요소가 대량 가져오기 작업에 영향을 주는지 여부는 작업 수행 방법에 따라 달라질 수 있습니다.
bcp 명령
데이터가 대상 테이블에 로드되면 bcp는 <ROW> 구성 요소를 무시합니다. 대신 bcp는 대상 테이블의 열 유형을 기반으로 하는 데이터를 로드합니다.T-SQL 문(BULK INSERT 및 OPENROWSET의 Bulk 행 집합 공급자)
대량의 데이터를 테이블로 가져오는 경우 Transact-SQL 문은 <ROW> 구성 요소를 사용하여 입력 행 집합을 생성합니다. 또한 Transact-SQL 문은 <ROW>에서 지정된 열 유형과 대상 테이블에 있는 해당 열에 따라 적절한 형식 변환을 수행합니다. 서식 파일에서 지정된 열 유형과 대상 테이블에서 지정된 열 유형이 일치하지 않는 경우 추가 형식 변환이 수행됩니다. bcp와 비교할 때 이 추가 형식 변환으로 인해 BULK INSERT 또는 OPENROWSET의 Bulk 행 집합 공급자 동작에서 불일치(즉, 전체 자릿수 손실)가 발생할 수 있습니다.
<ROW> 요소의 정보를 사용하면 추가 정보 없이 행을 생성할 수 있습니다. 따라서 SELECT 문(SELECT * FROM OPENROWSET(BULK datafile FORMATFILE=xmlformatfile)을 사용하여 행 집합을 생성할 수 있습니다.[!참고] 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");
}