Синтаксис схемы для 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 |
Дополнительные сведения о типах данных MicrosoftSQL 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).
Как массовый импорт использует элемент <ROW>
Элемент <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-файла форматирования).
Как массовый импорт использует элемент <COLUMN>
Для массового импорта данных в таблицу элементы <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");
}
См. также