Синтаксис схемы для 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>

ПримечаниеПримечание

Дополнительные атрибуты, связанные со значением типа xsi:type в элементах <FIELD> или <COLUMN>, описаны ниже в этом подразделе.

Описание элементов схемы

В этом разделе кратко описаны назначения каждого элемента, определяемого XML-схемой для XML-файла форматирования. Атрибуты описаны в отдельных подразделах ниже в этом разделе.

  • <BCPFORMAT>
    Элемент файла форматирования, который определяет структуру записей данного файла данных и его соответствие столбцам строки таблицы.

  • <RECORD .../>
    Определяет составной элемент, содержащий один или несколько элементов <FIELD>. Порядок, в котором поля объявлены в файле форматирования, является порядком, в котором эти поля будут расположены в файле данных.

  • <FIELD .../>
    Определяет поле в файле данных, которое содержит данные.

    Атрибуты этого элемента описаны в пункте «Атрибуты элемента <FIELD>» ниже в данном подразделе.

  • <ROW .../>
    Определяет составной элемент, содержащий один или несколько элементов <COLUMN>. Порядок элементов <COLUMN> не зависит от порядка элементов <FIELD> в определении RECORD. Скорее, порядок элементов <COLUMN> в файле форматирования определяет порядок столбцов результирующего набора строк. Поля данных загружаются в порядке, в котором соответствующие элементы <COLUMN> объявлены в элементе <COLUMN>.

    Дополнительные сведения см. в пункте «Как массовый импорт использует элемент <ROW>» ниже в данном подразделе.

  • <COLUMN>
    Определяет столбец как элемент (<COLUMN>). Каждый элемент <COLUMN> соответствует элементу <FIELD> (чей идентификатор задан в атрибуте SOURCE элемента <COLUMN>).

    Атрибуты этого элемента описаны в пункте «Атрибуты элемента <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"

Задает логическое имя поля в файле данных. Идентификатор поля является ключом, используемым для обращения к полю.

<FIELD ID="fieldID"/> сопоставляется с <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 ограничивает максимальную длину выходного столбца символов, ограничивая хранилище, выделенное для значения столбца. Это особенно удобно при использовании параметра BULK функции OPENROWSET в предложении SELECT FROM.

Значение m должно быть положительным целым числом. По умолчанию максимальная длина 8000 символов для столбца типа char и 4000 символов для столбца типа nchar.

Необязательный

COLLATION ="collationName"

Аргумент COLLATION допустим только для символьных полей. Список имен параметров сортировки SQL см. в разделе Имя параметров сортировки SQL Server (Transact-SQL).

Необязательный

TERMINATOR = "terminator"

Этот атрибут задает признак конца поля данных. Признаком конца может быть любой символ. Признак конца должен быть уникальным символом, который не является частью данных.

По умолчанию признаком конца поля является символ табуляции (представленный как «\t»). Чтобы указать знак абзаца, используйте сочетание символов «\r\n».

Используется только со значением xsi:type символьных данных, которые требуют наличия этого атрибута

Значения Xsi:type элемента <FIELD>

Значение xsi:type — это конструкция XML, используемая как атрибут и определяющая тип данных экземпляра элемента. Сведения по применению этой конструкции см. в пункте «Размещение значения xsi:type в наборе данных» ниже в этом разделе.

Значение xsi:type элемента <FIELD> поддерживает следующие типы данных.

Значения xsi:type элемента <FIELD>

Обязательные 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"

Задает идентификатор поля, сопоставляемого со столбцом.

<COLUMN SOURCE="fieldID"/> сопоставляется с <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 (значение не указано), результатом будет ошибка времени выполнения.

Атрибут NULLABLE используется только при выполнении простых инструкций SELECT FROM OPENROWSET(BULK...).

Необязательный (доступен для любого типа данных)

Значения xsi:type элемента <COLUMN>

Значение xsi:type — это конструкция XML, используемая как атрибут и определяющая тип данных экземпляра элемента. Сведения по применению этой конструкции см. в пункте «Размещение значения 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

Большой символьный объект (CLOB)

SQLNTEXT

Нет.

NULLABLE

Двоичная строка

SQLBINARY и SQLVARYBIN

Нет.

NULLABLE, LENGTH

Строка символов

SQLCHAR, SQLVARYCHAR, SQLNCHAR и SQLNVARCHAR

Нет.

NULLABLE, LENGTH

Важное примечаниеВажно!

Для массового экспорта или импорта данных SQLXML используется один из следующих типов данных в файле форматирования: SQLCHAR или SQLVARYCHAR (данные посылаются в кодовой странице клиента или в кодовой странице, предполагаемой параметрами сортировки), SQLNCHAR или SQLNVARCHAR (данные посылаются в формате Юникод) и SQLBINARY или SQLVARYBIN (данные посылаются без преобразования).

Дополнительные сведения о типах данных SQL Server см. в разделе Типы данных (Transact-SQL).

Как массовый импорт использует элемент &lt;ROW&gt;

Элемент <ROW> не учитывается в некоторых контекстах. Влияние элемента <ROW> на операцию массового импорта зависит от того, как выполняется операция.

  • Команда bcp.

    При загрузке данных в целевую таблицу команда bcp не учитывает компонент <ROW>. Вместо этого команда bcp загружает данные на основании типов столбцов целевой таблицы.

  • Инструкции Transact-SQL (команда BULK INSERT и поставщик массового набора строк OPENROWSET)

    При массовом импорте данных в таблицу инструкции Transact-SQL используют компонент <ROW> для формирования входного набора строк. Инструкции Transact-SQL также выполняют соответствующие преобразования типов, основываясь на типах столбцов, указанных для элемента <ROW> и соответствующего столбца в целевой таблице. При несовпадении типов столбцов в файле форматирования и в целевой таблице производится дополнительное преобразование типов, которое может привести к некоторым несовпадениям (то есть потере точности) в работе команды BULK INSERT или поставщика массового набора строк OPENROWSET по сравнению с командой bcp.

    Сведения в элементе <ROW> позволяют построить строку без дополнительных сведений. По этой причине набор строк можно сформировать при помощи инструкции SELECT (SELECT * FROM OPENROWSET(BULK datafile FORMATFILE=xmlformatfile).

    ПримечаниеПримечание

    Чтобы использовать предложение OPENROWSET BULK, необходим файл форматирования (обратите внимание, что преобразование типа данных поля в тип данных столбца доступно только при наличии XML-файла форматирования).

Как массовый импорт использует элемент &lt;COLUMN&gt;

Для массового импорта данных в таблицу элементы <COLUMN> в файле форматирования сопоставляют поле файла данных со столбцами таблицы, указывая:

  • позицию каждого поля в строке файла данных;

  • тип столбца, используемый для преобразования типа данных поля в необходимый тип данных столбца.

Если с полем не сопоставлено ни одного столбца, поле не копируется в сформированные строки. Такое поведение позволяет файлам данных формировать строки с различными столбцами (в разных таблицах).

Аналогично, для массового экспорта данных из таблицы каждый элемент <COLUMN> в файле форматирования сопоставляет столбец строки входной таблицы с соответствующим полем выходного файла данных.

Помещение значения xsi:type в набор данных

Если XML-документ проверяется при помощи языка определения XML-схемы (XSD), значение xsi:type не помещается в набор данных. Тем не менее, сведения xsi:type можно поместить в набор данных, загрузив XML-файл форматирования в XML-документ, например myDoc, как показано в следующем фрагменте кода:

...;
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");
}