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

Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse Analytics AnalyticsPlatform System (PDW)

SQL Server предоставляет схему 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 Utility.

Примечание

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

Примечание

Этот синтаксис, включая массовую вставку, не поддерживается в Azure Synapse Analytics. В Azure Synapse Analytics и других платформах облачных баз данных перемещайте данные с помощью инструкции COPY в Фабрика данных Azure или с помощью инструкций T-SQL, таких как COPY INTO и PolyBase.

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

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

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

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

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

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

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

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

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

    Примечание

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

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

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

XML-файл форматирования содержит два компонента main: <RECORD> и <ROW>:

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

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

    <ЗАПИСИ>

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

    </ЗАПИСИ>

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

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

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

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

    <ROW>

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

    </СТРОКИ>

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

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

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

Чтобы узнать, как синтаксис соответствует фактическим XML-файлам форматирования, см. примеры xml-файлов форматирования.

Примечание

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

Базовый синтаксис XML-схемы

В этих синтаксических инструкциях отображаются только элементы (<BCPFORMAT>, <RECORD>, <FIELD>, <ROW> и <COLUMN>) и их основные атрибуты.

Примечание

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

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

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

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

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

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

Атрибуты этого элемента рассматриваются в разделе Атрибуты <элемента FIELD> далее в этом разделе.

<СТРОКИ.../>
Определяет сложный элемент, содержащий один или несколько <элементов 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> поддерживает следующие типы данных.

<Значения 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" Задает идентификатор поля, сопоставляемого со столбцом.

<COLUMN SOURCE**="fieldID"/> сопоставляется с <FIELD ID="fieldID"**/>
Обязательно
NAME = "columnName" Задает имя столбца в наборе строк, представленном файлом форматирования. Это имя столбца используется для идентификации столбца в результирующем наборе, и оно не обязательно должно соответствовать имени столбца целевой таблицы. Обязательно
xsi**:type ="ColumnType"** Это конструкция XML (используется как атрибут), которая указывает тип данных экземпляра элемента. Значение атрибута ColumnType определяет, какой из необязательных атрибутов (см. ниже) необходим в данном экземпляре.

Примечание. Возможные значения ColumnType и связанные с ними атрибуты перечислены в <таблице элементов COLUMN> в значениях <Xsi:type в разделе Элемент СТОЛБЦА>.
Необязательно
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 выполняют соответствующие преобразования типов на основе типов столбцов, указанных в строке <,> и соответствующего столбца в целевой таблице. При несовпадении типов столбцов в файле форматирования и в целевой таблице производится дополнительное преобразование типов, Это дополнительное преобразование типа может привести к некоторым различиям (т. е. к потере точности) в работе команды BULK INSERT или поставщика массового набора строк OPENROWSET по сравнению с командой bcp.

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

    Примечание

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

Использование элемента 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-файлов форматирования.

Примечание

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

A. Упорядочить поля символьных данных так же, как столбцы таблицы

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

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

Файл данных (запись): Вкладка "Возраст<">вкладка Имя<вкладка>"Возвращаемая фамилия"<>

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

В элементе <RECORD> файл форматирования представляет значения во всех трех полях в символьном виде. Для каждого поля атрибут 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).

Б. Порядок полей данных и столбцов таблицы по-разному

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

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

Файл данных (запись): вкладка "Возраст<">вкладка "Имя", вкладка "Имя<", возвращаемая>первым именем<>

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

В элементе <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>

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

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

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

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

В элементе <RECORD> файла форматирования значения данных представлены во всех четырех полях как символьные данные. Для каждого поля атрибут 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).

Г. Сопоставление <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>

Д. Сопоставление 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>

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

В следующем примере описываются поля фиксированной ширины в 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-файлов форматирования см. в следующих разделах.

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

Дальнейшие действия