使用 bcp 创建格式化文件 (SQL Server)

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)

本文说明如何使用 bcp 实用工具为特定表创建格式化文件。 格式化文件基于指定的数据类型选项(-n-c-w-N)以及表或视图分隔符。

批量导入 SQL Server 表或从表批量导出数据时,可以使用格式化文件作为灵活的系统来写入数据文件。 格式文件只需进行极少的编辑甚至无需编辑即可编写出符合其他数据格式的数据文件,或从其他软件程序读取数据文件。

限制

读取格式化文件所用的 bcp 实用工具 (bcp.exe) 的版本必须与创建格式化文件所用的版本相同或更高。 例如,SQL Server 2016 (13.x)bcp 可以读取由 SQL Server 2014 (12.x)bcp 生成的 12.0 版格式化文件,但 SQL Server 2014 (12.x)bcp 无法读取由 SQL Server 2016 (13.x)bcp 生成的 13.0 版格式化文件。

注意

Azure Synapse Analytics不支持此语法(包括批量插入)。 在 Azure Synapse Analytics 和其他云数据库平台集成中,通过 Azure 数据工厂中的 COPY 语句或使用 T-SQL 语句(如 COPY INTO)和 PolyBase 完成数据移动。

创建格式化文件

SQL Server 支持两种类型的格式化文件:非 XML 格式和 XML 格式。 非 XML 格式是 SQL Server 早期版本支持的原始格式。

通常,XML 与非 XML 格式化文件可以互换。 但是,建议您为格式化文件使用 XML 语法,因为与非 XML 格式化文件相比,格式化文件具有多项优点。

本文中的 Transact-SQL 代码示例使用 AdventureWorks2022AdventureWorksDW2022 示例数据库,可从 Microsoft SQL Server 示例和社区项目主页下载它。 Adventure Works Cycles 是一家虚构的制造公司,用于演示数据库概念和方案。

创建 XML 格式化文件

若要使用 bcp 命令创建格式化文件,请指定 format 参数,并使用 nul 而不是数据文件路径。 format 选项始终要求 -f 选项,若要创建 XML 格式化文件,还必须指定 --x 选项,例如 bcp <table_or_view> format nul -f <format_file_name> -x

为区分 XML 格式化文件,我们建议使用 .xml 作为文件扩展名,例如 MyTable.xml

有关 XML 格式化文件的结构和字段的信息,请参阅 XML 格式化文件 (SQL Server)

示例

本部分包含以下示例,演示如何使用 bcp 命令创建 XML 格式化文件HumanResources.Department 表包含四列: DepartmentIDNameGroupNameModifiedDate

A. 为字符数据创建 XML 格式化文件

以下示例将为 Department.xml表创建 XML 格式化文件 HumanResources.Department 。 格式化文件使用字符数据格式和非默认字段终止符 (,)。 在命令之后显示生成的格式化文件的内容。

bcp 命令包含以下限定符。

限定符 说明
format nul -x -f <format_file> 指定 XML 格式化文件。
-c 指定字符数据。
-t, 将逗号 (,) 指定为字段终止符。

请注意:如果数据文件使用默认的字段终止符 (\t),则不需要 -t 开关。
-T 指定 bcp 实用工具通过使用集成安全性的受信任连接连接到 SQL Server 。 如果未指定 -T,则必需指定 -U-P 才能成功登录。

在 Windows 命令提示符下,输入以下 bcp 命令:

bcp AdventureWorks2022.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 格式化文件 (SQL Server)。 有关字符数据的信息,请参阅使用字符格式导入或导出数据 (SQL Server)

B. 为本机数据创建 XML 格式化文件

以下示例将为 Department-n.xml表创建 XML 格式化文件 HumanResources.Department 。 格式化文件使用本机数据类型。 在命令之后显示生成的格式化文件的内容。

bcp 命令包含以下限定符。

限定符 说明
format nul -x -f <format_file> 指定 XML 格式化文件。
-n 指定本机数据类型。
-T 指定 bcp 实用工具通过使用集成安全性的受信任连接连接到 SQL Server 。 如果未指定 -T,则必需指定 -U-P 才能成功登录。

在 Windows 命令提示符下,输入以下 bcp 命令:

bcp AdventureWorks2022.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 格式化文件 (SQL Server)。 有关如何使用本机数据的信息,请参阅使用本机格式导入或导出数据 (SQL Server)

将数据字段映射到表列

如同使用 bcp创建一样,格式化文件按顺序说明所有的表列。 可以修改格式化文件以重新安排或忽略表列。 您可以针对字段未直接映射到表列的数据文件来自定义格式化文件。 有关详细信息,请参阅以下文章: