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


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

Применимо:SQL Server База данных SQL Azure Управляемый экземпляр 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.

Для массового экспорта и импорта поддерживаются два типа файлов форматирования: файлы форматирования, отличные от 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 обладает двумя основными компонентами: <RECORD> и <ROW>.

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

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

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

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

    Поле в файле данных может иметь фиксированную или переменную длину или завершаться определенным символом. Значение поля может быть представлено как символ (с использованием однобайтового представления), широкого символа (с использованием 2-байтового представления Юникода), собственного формата базы данных или имени файла. Если значение поля представляется в виде имени файла, оно указывает на файл, который содержит значение столбца 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

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

Примечание.

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

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

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

  • <BCPFORMAT>

    Элемент format-file, определяющий структуру записей заданного файла данных и его соответствие столбцам строки таблицы в таблице.

  • <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 Description Необязательный или
Обязательное поле
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, , 24или 8. Необязательный, если xsi:type значение не требуется
MAX_LENGTH="m" Этот атрибут является максимальным числом байтов, которые могут храниться в данном поле. Без целевой таблицы максимальная длина столбца не известна. Атрибут MAX_LENGTH ограничивает максимальную длину выходного символьного столбца, ограничивая хранилище, выделенное для значения столбца. Это особенно удобно при использовании OPENROWSET параметра функции BULK в предложении SELECT FROM .

Значение m должно быть положительным целым числом. По умолчанию максимальная длина составляет 8 000 символов для столбца char и 4000 символов для столбца nchar .
Необязательно
COLLATION="collationName" COLLATION допускается только для полей символов. Список имен параметров сортировки SQL Server см. в разделе "Имя сортировки SQL Server". Необязательно
TERMINATOR="terminator" Этот атрибут задает признак конца поля данных. Признаком конца может быть любой символ. Терминатор должен быть уникальным символом, который не является частью данных.

По умолчанию терминатор поля — это символ табуляции (представленный как \t). Чтобы представить знак абзаца, используйте \r\n.
Этот атрибут используется только с 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

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

  • <COLUMN> Атрибуты элемента

    В этом разделе описываются атрибуты <COLUMN> элемента, которые приведены в следующем синтаксисе схемы:

    <COLUMN
    SOURCE = "fieldID"
    NAME = "columnName"
    xsi:type = "columnType"
    [ LENGTH = "n" ]
    [ PRECISION = "n" ]
    [ SCALE = "value" ]
    [ NULLABLE = { "YES" | "NO" } ]
    />
    

    Поле сопоставлено со столбцом целевой таблицы с использованием следующих атрибутов:

    Атрибут COLUMN Description Необязательный или
    Обязательное поле
    SOURCE="fieldID" Задает идентификатор поля, сопоставляемого со столбцом.

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

    Заметка: Возможные значения ColumnType и их связанные атрибуты перечислены в таблице элементов <COLUMN>, в разделе значений xsi:type элемента <COLUMN>.
    Необязательно
    LENGTH="n" Определяет длину для экземпляра типа данных фиксированной длины. LENGTH используется только в том случае, если xsi:type это строковый тип данных.

    Значение n должно быть положительным целым числом.
    Необязательный (доступен только в том случае, если xsi:type тип данных строки)
    PRECISION="n" Указывает количество цифр в числе. Например, число 123,45 имеет точность 5.

    Значение должно быть положительным целым числом.
    Необязательный (доступен только в том случае, если xsi:type тип данных с переменным числом)
    SCALE="int" Указывает количество цифр справа от десятичной запятой в числе. Например, число 123,45 имеет масштаб 2.

    Значением должно быть целое число.
    Необязательный (доступен только в том случае, если xsi:type тип данных с переменным числом)
    NULLABLE={ "ДА" | "NO" } Указывает, может ли столбец принимать NULL значения. Этот атрибут не зависит от FIELDS. Однако, если столбец не допускает значение NULL, а поле указывает NULL (не задавая никакого значения), возникает ошибка во время выполнения.

    Атрибут NULLABLE используется только в том случае, если вы выполняете простую SELECT FROM OPENROWSET(BULK...) инструкцию.
    Необязательный (доступен для любого типа данных)

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

    Значение xsi:type — это xml-конструкция (используемая как атрибут), которая определяет тип данных экземпляра элемента. Дополнительные сведения об использовании функции "Включение xsi:type значения в набор данных" вы найдете в следующем разделе.

    Элемент <COLUMN> поддерживает собственные типы данных SQL, как показано ниже.

    Тип категории <COLUMN> Типы данных Обязательные XML-атрибуты
    для типа данных
    Необязательные XML-атрибуты
    для типа данных
    Исправлено SQLBIT, SQLTINYINT, SQLSMALLINTSQLINTSQLBIGINTSQLFLT4SQLFLT8SQLDATETIMESQLDATETIM4SQLDATETIM8SQLMONEYSQLMONEY4SQLVARIANTиSQLUNIQUEID Нет. NULLABLE
    Номер переменной SQLDECIMAL и SQLNUMERIC. Нет. NULLABLE, PRECISION, SCALE
    Переменная дата и время SQLDATETIME2, SQLTIME, SQLDATETIMEOFFSET Нет. NULLABLE, SCALE
    LOB SQLIMAGE, CharLOB, SQLTEXT и SQLUDT Нет. NULLABLE
    Символьный LOB SQLNTEXT Нет. NULLABLE
    Двоичная строка SQLBINARY и SQLVARYBIN. Нет. NULLABLE, LENGTH
    Символьная строка SQLCHAR, SQLVARYCHAR, SQLNCHAR и SQLNVARCHAR Нет. NULLABLE, LENGTH

    Внимание

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

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

Как элемент <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 <data-file> FORMATFILE=<xml-format-file>).

    Для 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-файлов форматирования.

Сведения о создании файлов форматирования см. в статье "Создание файла формата с помощью BCP(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="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 пример см. в статье "Создание файла форматирования с помощью bcp (SQL Server)".

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

В следующем примере представлен 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="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<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).

D. Сопоставьте <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>

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

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