Поделиться через


XML-файлы форматирования (SQL Server)

SQL Server 2012 предоставляет схему XML, которая определяет синтаксис для написания XML-файлов форматирования в целях использования при массовом импорте данных в таблицу SQL Server. XML-файлы форматирования должны придерживаться этой схемы, которая определена при помощи языка XML Schema Definition Language (XSDL). XML-файлы форматирования поддерживаются только при установке средств SQL Server вместе с собственным клиентом SQL Server.

Можно использовать XML-файл форматирования с командой bcp, инструкциями BULK INSERT или INSERT ... SELECT * FROM OPENROWSET(BULK...). Команда bcp позволяет автоматически создать XML-файл форматирования для таблицы. Дополнительные сведения см. в разделе Программа bcp.

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

Для массового экспорта и импорта поддерживаются два типа файлов форматирования: файлы форматирования в формате, отличном от XML и XML-файлы форматирования. Они более гибкие и мощные по сравнению с файлом форматирования в формате, отличном от XML. Дополнительные сведения о файлах форматирования в формате, отличном от XML, см. в разделе Файлы формата, отличные от XML (SQL Server).

В этом разделе:

  • Преимущества использования XML-файлов форматирования

  • Структура XML-файлов форматирования

  • Синтаксис схемы для XML-файлов форматирования

  • Образцы XML-файлов форматирования

  • Связанные задачи

  • См. также

Преимущества использования XML-файлов форматирования

  • XML-файлы форматирования описывают сами себя, благодаря чему упрощается их чтение, создание и расширение. Они доступны для чтения человеком, что позволяет легко понять, как интерпретируются данные во время массовых операций.

  • XML-файлы форматирования содержат типы данных целевых столбцов. Запись XML четко описывает типы данных и элементы файла данных, а также соответствие элементов данных столбцам таблицы.

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

  • XML-файл форматирования позволяет загружать из файлов данных поля, содержащие единственный тип данных LOB.

  • XML-файл форматирования можно улучшить, сохранив совместимость с предыдущими версиями. Кроме того, понятность записи XML облегчает создание нескольких файлов форматирования для некоторого файла данных. Это удобно при сопоставлении всех или некоторых полей данных со столбцами в различных таблицах и представлениях.

  • Синтаксис XML-файла форматирования не зависит от направления операции; для операций массового импорта и массового экспорта синтаксис одинаков.

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

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

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

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

[В начало]

Структура XML-файлов форматирования

XML-файлы форматирования, как и файл форматирования в формате, отличном от XML, определяют формат и структуру полей данных в файле данных и сопоставляют их со столбцами целевой таблицы.

XML-файл форматирования содержит два основных элемента: <RECORD> и <ROW>.

  • Элемент <RECORD> описывает способ хранения данных в файле данных.

    Каждый элемент <RECORD> содержит набор из одного или нескольких элементов <FIELD>. Эти элементы соответствуют полям в файле данных. Базовый синтаксис:

    <RECORD>

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

    </RECORD>

    Каждый элемент <FIELD> описывает содержимое определенного поля данных. Поле может быть сопоставлено только с одним столбцом таблицы. Столбцам не обязательно сопоставлять все поля.

    Поле в файле данных может иметь фиксированную или переменную длину или завершаться определенным символом. Значение поля может быть представлено в следующем виде: символ (используя однобайтовое представление), широкий символ (используя двухбайтовое представление Юникод), собственный формат базы данных или имя файла. Если значение поля представляется в виде имени файла, оно указывает на файл, который содержит значение столбца BLOB в целевой таблице.

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

    Элемент <ROW> содержит набор элементов <COLUMN>. Эти элементы соответствуют столбцам таблицы. Базовый синтаксис:

    <ROW>

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

    </ROW>

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

[В начало]

Синтаксис схемы для XML-файлов форматирования

Этот раздел содержит список элементов и атрибутов схемы XML для XML-файлов форматирования. Синтаксис файла форматирования не зависит от направления операции; для операций массового импорта и массового экспорта синтаксис одинаков. В разделе также рассматривается использование элементов <ROW> и <COLUMN> массовым импортом и помещение значения xsi:type элемента в набор данных.

Чтобы узнать, как этот синтаксис соответствует реальным XML-файлам форматирования, см. далее раздел Образец XML-файлов форматирования.

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

Можно изменить файл форматирования, чтобы обеспечить возможность массового импорта данных из файла данных, в котором количество или порядок полей отличаются от количества или порядка столбцов таблицы. Дополнительные сведения см. в разделе Файлы форматирования для импорта или экспорта данных (SQL Server).

В этом разделе.

  • Основной синтаксис схемы XML

  • Как массовый импорт использует элемент <ROW>

  • Как массовый импорт использует элемент <COLUMN>

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

Основной синтаксис схемы 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>, описаны ниже в этом подразделе.

В этом разделе.

  • Элементы схемы

  • Атрибуты элемента <FIELD> (и значения Xsi:type элемента <FIELD>)

  • Атрибуты элемента <COLUMN> (и значения Xsi:type элемента <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).

[В начало]

Как массовый импорт использует элемент <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");
}

[В начало]

Образцы XML-файлов форматирования

Этот раздел содержит сведения о различных способах использования XML-файлов форматирования, в том числе пример работы с базой данных Adventure Works.

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

В файлах данных, приведенных в следующих примерах, <tab> обозначает символ табуляции в файле данных, а <return> означает символ возврата каретки.

Эти примеры иллюстрируют ключевые аспекты применения XML-файлов форматирования.

  • упорядочивание полей с символьными данными по столбцам таблицы;

  • упорядочивание полей данных в порядке, отличающемся от порядка столбцов таблицы;

  • пропуск поля данных;

  • сопоставление различных типов полей и столбцов;

  • сопоставление XML-данных с таблицей;

  • импорт полей фиксированной длины и полей фиксированной ширины.

  • Дополнительный пример

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

Дополнительные сведения о создании файлов форматирования см. в разделе Создание файла форматирования (SQL Server).

А.упорядочивание полей с символьными данными по столбцам таблицы;

В следующем примере представлен XML-файл форматирования, описывающий файл данных, в котором содержатся три поля символьных данных. Файл форматирования сопоставляет файл данных с таблицей, содержащей три столбца. Поля данных соответствуют «один к одному» столбцам таблицы.

Таблица (строка): Person (Age int, FirstName varchar(20), LastName varchar(30))

Файл данных (запись): Age<tab>Firstname<tab>Lastname<return>

Следующий XML-файл форматирования считывает данные из файла данных в таблицу.

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

Поля данных соответствуют «один к одному» столбцам таблицы. В элементе <ROW> файла форматирования столбец Age сопоставляется с первым полем, столбец FirstName — со вторым, а столбец LastName — с третьим.

<?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="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>
ПримечаниеПримечание

Эквивалентный пример для базы данных AdventureWorks2012 см. в разделе Создание файла форматирования (SQL Server).

[В начало]

Б.упорядочивание полей данных в порядке, отличающемся от порядка столбцов таблицы;

В следующем примере представлен XML-файл форматирования, описывающий файл данных, в котором содержатся три поля символьных данных. Файл форматирования сопоставляет файл данных с таблицей, содержащей три столбца, порядок следования которых отличается от порядка следования полей файла данных.

Таблица (строка): Person (Age int, FirstName varchar(20), LastName varchar(30))

Файл данных (запись): Age<tab>Firstname<tab>Lastname<return>

В элементе <RECORD> файл форматирования представляет значения во всех трех полях в символьном виде.

В элементе <ROW> файла форматирования столбец Age сопоставляется с первым полем, столбец FirstName — с третьим, а столбец LastName — со вторым.

<?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="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>
ПримечаниеПримечание

Эквивалентный пример для базы данных AdventureWorks2012 см. в разделе Использование файла форматирования для сопоставления столбцов таблицы с полями файла данных (SQL Server).

[В начало]

В.пропуск поля данных;

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

Таблица (строка): Person (Age int, FirstName Varchar(20), LastName Varchar(30))

Файл данных (запись): Age<tab>employeeID<tab>Firstname<tab>Lastname<return>

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

В элементе <ROW> файла форматирования столбец Age сопоставляется с первым полем, столбец FirstName — с третьим, а столбец LastName — с четвертым.

<?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="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>
ПримечаниеПримечание

Эквивалентный пример для базы данных AdventureWorks2012 см. в разделе Использование файла форматирования для пропуска поля данных (SQL Server).

[В начало]

Г.Сопоставление атрибута xsi:type для <FIELD> с атрибутом xsi:type для <COLUMN>

Следующий пример демонстрирует различные типы полей и их сопоставление со столбцами.

<?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 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>

[В начало]

Д.сопоставление XML-данных с таблицей;

В следующем примере создается пустая таблица из двух столбцов (t_xml), первый столбец которой сопоставляется с типом данных int, а второй — с типом данных xml.

CREATE TABLE t_xml (c1 int, c2 xml)

Следующий XML-файл форматирования загружает файл данных в таблицу t_xml.

<?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" 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>

[В начало]

Е.импорт полей фиксированной длины и полей фиксированной ширины.

В следующем примере описываются поля фиксированной ширины в 10 или 6 символов каждое. Файл форматирования представляет длину и ширину этих полей в виде LENGTH="10" и LENGTH="6" соответственно. Каждая строка файлов данных оканчивается комбинацией символов возврата каретки и перевода строки — {CR}{LF}, которую файл форматирования представляет в виде TERMINATOR="\r\n".

<?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="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-файлов форматирования см. в следующих разделах.

[В начало]

Связанные задачи

[В начало]

См. также

Отсутствует.

См. также

Справочник

Типы данных (Transact-SQL)

Основные понятия

Массовый импорт и экспорт данных (SQL Server)

Файлы формата, отличные от XML (SQL Server)

Файлы форматирования для импорта или экспорта данных (SQL Server)