Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо:SQL Server
База данных SQL Azure Управляемый экземпляр SQL Azure
azure Synapse Analytics Analytics
Platform 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 , , 2 4 или 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
,SQLSMALLINT
SQLINT
SQLBIGINT
SQLFLT4
SQLFLT8
SQLDATETIME
SQLDATETIM4
SQLDATETIM8
SQLMONEY
SQLMONEY4
SQLVARIANT
и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-файлов форматирования.
- Упорядочить поля символьных данных так же, как столбцы таблицы
- Порядок полей данных и столбцов таблицы по-разному
- Опущено поле данных
- Сопоставление различных типов полей с столбцами
- Сопоставление 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>
Примечание.
Аналогичный AdventureWorks2022
пример см. в разделе "Использование файла форматирования" для сопоставления столбцов таблиц с полями файлов данных (SQL Server).
В. Опущено поле данных
В следующем примере представлен 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-файлов, см. в следующих статьях:
- Использование файла форматирования для пропуска столбца таблицы (SQL Server)
- Использование файла форматирования для пропуска поля данных (SQL Server)
- Использование файла форматирования для сопоставления столбцов таблиц с полями файлов данных (SQL Server)
Связанные задачи
- Создание файла форматирования с помощью bcp (SQL Server)
- Использование файла форматирования для массового импорта данных (SQL Server)
- Использование файла форматирования для пропуска столбца таблицы (SQL Server)
- Использование файла форматирования для пропуска поля данных (SQL Server)
- Использование файла форматирования для сопоставления столбцов таблиц с полями файлов данных (SQL Server)