Создание файла форматирования с помощью bcp (SQL Server)

Применимо:SQL ServerБаза данных SQL AzureУправляемый экземпляр SQL AzureAzure Synapse AnalyticsСистема аналитической платформы (PDW)

В этой статье описывается, как использовать служебную программу bcp для создания файла формата для определенной таблицы. Файл форматирования основан на указанном параметре типа данных (-n, -c-wили-N) и разделителях таблиц или представлений.

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

Ограничения

Версия bcp утилиты (bcp.exe), используемая для чтения файла формата, должна совпадать или быть более поздней версии, используемой для создания файла формата. Например, SQL Server 2025 (17.x) bcp может читать файл в формате версии 16.0, который генерируется SQL Server 2022 (16.xbcp), но SQL Server 2022 (16.x) bcp не может читать файл версии 17.0, который генерируется SQL Server 2025 (17.xbcp).

Примечание.

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

Создание файлов форматирования

SQL Server поддерживает два типа файлов формата: не-XML-формат и XML-формат. Формат, отличный от XML, — это исходный формат, поддерживаемый более ранними версиями SQL Server.

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

Примеры кода в этой статье используют пример базы данных AdventureWorks2025 или AdventureWorksDW2025, которую можно скачать на домашней странице примеров Microsoft SQL Server и проектов сообщества . Компания Adventure Works Cycles — это вымышленная производственная компания, которая используется для демонстрации концепций баз данных и сценариев работы с ними.

Создать файл формата

Чтобы создать файл формата с помощью bcp, укажите аргумент format и используйте nul вместо пути к файлу данных. Опция format всегда требует такой -f опции.

Чтобы создать файл в формате XML, необходимо указать -x опцию, например bcp <table_or_view> format nul -f <format_file_name> -x.

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

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

Примеры

В этом разделе приведены примеры, показывающие, как создать файл форматирования bcp . Таблица HumanResources.Department содержит четыре столбца: DepartmentID, Name, GroupNameи ModifiedDate.

А. Создать файл формата для данных символов

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

Создайте файл в формате XML с именем Department-c.xml. Файл форматирования использует нестандартный терминатор поля (,). Следующий раздел показывает содержимое сгенерированного файла формата.

Команда bcp содержит следующие уточнения.

Квалификаторы Описание
format nul -x -f <format_file> Задает XML-файл форматирования.
-c Задает символьные данные.
-t, Задает запятую (,) в качестве признака конца поля.

Примечание. Если файл данных использует терминатор полей по умолчанию (\t), параметр -t не требуется.
-T Указывает, что bcp подключается к SQL Server с доверенным соединением с интегрированной безопасностью. Если вы не указали -T, вы должны указать -U и -P успешно войти.

В командной строке Windows введите следующую команду bcp :

bcp AdventureWorks2025.HumanResources.Department format nul -c -x -f Department-c.xml -t, -T

Созданный файл форматирования Department-c.xmlсодержит следующие 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="CharTerm" TERMINATOR="," MAX_LENGTH="7"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="24"/>
</RECORD>
<ROW>
  <COLUMN SOURCE="1" NAME="DepartmentID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="GroupName" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="ModifiedDate" xsi:type="SQLDATETIME"/>
</ROW>
</BCPFORMAT>

Для получения информации о синтаксисе этого файла формата см. XML-файлы. Для информации о данных символов см. раздел «Использовать формат символа для импорта или экспорта данных».

B. Создать файл формата для нативных данных

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

Создайте файл в формате XML с именем Department-n.xml. Следующий раздел показывает содержимое сгенерированного файла формата.

Команда bcp содержит следующие уточнения.

Квалификаторы Описание
format nul -x -f <format_file> Задает XML-файл форматирования.
-n Указывает собственные типы данных.
-T Указывает, что bcp подключается к SQL Server с доверенным соединением с интегрированной безопасностью. Если вы не указали -T, вы должны указать -U и -P успешно войти.

В командной строке Windows введите следующую команду bcp :

bcp AdventureWorks2025.HumanResources.Department format nul -x -f Department-n.xml -n -T

Созданный файл форматирования Department-n.xmlсодержит следующие 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="NativeFixed" LENGTH="2"/>
  <FIELD ID="2" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="NativeFixed" LENGTH="8"/>
</RECORD>
<ROW>
  <COLUMN SOURCE="1" NAME="DepartmentID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="GroupName" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="ModifiedDate" xsi:type="SQLDATETIME"/>
</ROW>
</BCPFORMAT>

Для получения информации о синтаксисе этого файла формата см. XML-файлы. Для получения информации о том, как использовать нативные данные, см. раздел «Использовать нативный формат для импорта или экспорта данных».

В. Создание файла форматирования, отличного от XML для собственных данных Юникода

Чтобы создать для таблицы HumanResources.Department файл форматирования в формате, отличном от XML для данных в собственном формате с кодировкой Юникод, используется следующая команда:

bcp AdventureWorks2025.HumanResources.Department format nul -T -N -f Department-n.fmt

Для получения дополнительной информации о том, как использовать нативные данные Unicode, см. раздел «Использовать нативный формат Unicode для импорта или экспорта данных».

D. Создание файла форматирования, отличного от XML для символьных данных Юникода

Чтобы создать для таблицы HumanResources.Department файл в формате, отличном от XML, с символьными данными в кодировке Юникод, использующий конечные символы по умолчанию, применяется следующая команда:

bcp AdventureWorks2025.HumanResources.Department format nul -T -w -f Department-w.fmt

Для получения дополнительной информации о том, как использовать символы Unicode, см. раздел «Использовать формат символов Unicode для импорта или экспорта данных».

E. Использование файла форматирования с параметром кодовой страницы

Когда вы создаёте файл формата с помощью bcp format, в него записываются сведения о порядке сортировки и кодовой странице.

Следующий пример файла форматирования для таблицы с пятью столбцами включает параметры сортировки.

13.0
5
1  SQLCHAR         0       0       "\t"             1     c_0          Cyrillic_General_CS_AS
2  SQLCHAR         0       0       "\t"             2     c_1          Cyrillic_General_CS_AS
3  SQLCHAR         0       3000    "\t"             3     c_2          Cyrillic_General_CS_AS
4  SQLCHAR         0       5       "\t"             4     c_3          ""
5  SQLCHAR         0       41      "!!!\r\r\n"      5     c_4          ""

Если вы пытаетесь импортировать данные в SQL Server с помощью bcp in -c -C65001 -f format_file ..., BULK INSERT или OPENROWSET с FORMATFILE='format_file' CODEPAGE=65001 ..., информация о параметрах сортировки или кодовой странице в файле формата имеет приоритет перед параметром 65001.

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

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

13.0
5
1  SQLCHAR         0       0       "\t"             1     c_0              ""
2  SQLCHAR         0       0       "\t"             2     c_1              ""
3  SQLCHAR         0       3000    "\t"             3     c_2              ""
4  SQLCHAR         0       5       "\t"             4     c_3              ""
5  SQLCHAR         0       41      "!!!\r\r\n"      5     c_4              ""

Сопоставление полей данных с столбцами таблицы

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