使用非 XML 格式文件 (SQL Server)
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)
在 SQL Server 中,批量导出和导入支持两种类型的格式化文件:非 XML 格式化文件和 XML 格式化文件。
非 XML 格式化文件的优点
通过在 bcp 命令中指定 format 选项,可以自动创建非 XML 格式化文件。
当在 bcp 命令中指定某个现有的格式化文件时,该命令就使用记录在该格式化文件中的值,而不提示你输入文件存储类型、前缀长度、字段长度或字段终止符。
您可为特定的数据类型(例如字符数据或本机数据)创建格式化文件。
还可以创建非 XML 格式化文件,这种文件包含为每个数据字段交互式指定的属性。 有关更多信息,请参阅在使用 bcp 时指定数据格式以实现兼容性 (SQL Server)。
注意
XML 格式化文件与非 XML 格式化文件相比具有一些优点。 有关更多信息,请参阅 XML 格式化文件 (SQL Server)。
注意
Azure Synapse Analytics不支持此语法(包括批量插入)。 在 Azure Synapse Analytics 和其他云数据库平台集成中,通过 Azure 数据工厂中的 COPY 语句或使用 T-SQL 语句(如 COPY INTO)和 PolyBase 完成数据移动。
非 XML 格式化文件的结构
非 XML 格式化文件是具有特殊结构的文本文件。 非 XML 格式化文件包含了有关每个表列的文件存储类型、前缀长度、字段长度和字段终止符的信息。
下图显示了一个示例非 XML 格式化文件的格式化文件字段。
“版本”和“列数”字段仅出现一次。 下表对其意义进行了说明。
格式化文件字段 | 说明 |
---|---|
版本 | bcp 实用工具的版本号: 9.0 = SQL Server 2005 (9.x) 10.0 = SQL Server 2008 (10.0.x) 11.0 = SQL Server 2012 (11.x) 12.0 = SQL Server 2014 (12.x) 该版本号仅可由 bcp 识别,而无法由 Transact-SQL 识别。 注意:读取格式化文件所用的 bcp 实用工具 (Bcp.exe) 的版本必须与创建格式化文件所用的版本相同或更高。 例如,SQL Server 2012 (11.x)bcp 可以读取由 SQL Server 2008 (10.0.x)bcp 生成的 10.0 版格式化文件,但 SQL Server 2008 (10.0.x)bcp 无法读取由 SQL Server 2014 (12.x)bcp 生成的 12.0 版格式化文件。 |
列数 | 数据文件中字段的数目。 该数目必须在所有行中都相同。 |
其他格式化文件字段说明需要大容量导入或导出的数据字段。 每个数据字段都需在格式化文件中占单独一行。 每个格式化文件行均包含下表中说明的格式化文件字段的值。
格式化文件字段 | 说明 |
---|---|
宿主文件字段顺序 | 用以表示数据文件中每个字段的位置的数字。 行中的第一个字段为 1,依此类推。 |
宿主文件数据类型 | 表示存储在数据文件的给定字段中的数据类型。 对于 ASCII 数据文件,使用 SQLCHAR;对于本机格式数据文件,使用默认的数据类型。 有关详细信息,请参阅使用 bcp 指定文件存储类型 (SQL Server)。 |
前缀长度 | 字段长度前缀字符的数目。 有效前缀长度是 0、1、2、4 和 8。 若要避免指定长度前缀,将其设置为 0。 如果字段包含 NULL 数据值,则必须指定长度前缀。 有关详细信息,请参阅使用 bcp 指定数据文件中的前缀长度 (SQL Server)。 |
宿主文件数据长度 | 数据文件的特定字段中所存储的数据类型的最大长度(按字节计)。 如果您正在为带分隔符的文本文件创建非 XML 格式化文件,则可以将每个数据字段的宿主文件数据长度指定为 0。 当带分隔符的文本文件的前缀长度为 0 并导入终止符时,可忽略字段长度值,因为字段所使用的存储空间等于数据加上终止符的长度。 有关详细信息,请参阅使用 bcp 指定字段长度 (SQL Server)。 |
终止符 | 用来分隔数据文件中各字段的分隔符。 常用的终止符为逗号 (,)、制表符 (\t) 和行结束符 (\r\n)。 有关更多信息,请参阅指定字段终止符和行终止符 (SQL Server)。 |
服务器列顺序 | 列在 SQL Server 表中显示的顺序。 例如,如果数据文件的第四个字段映射到 SQL Server 表中的第六列,则第四个字段的服务器列顺序为 6。 要阻止表中的某个列接收数据文件中的任何数据,请将服务器列顺序值设置为 0 。 |
服务器列名 | 从 SQL Server 表中复制的列名。 无需使用字段的实际名称,但格式化文件中的字段不得为空。 |
列排序规则 | 排序规则用于在数据文件中存储字符和 Unicode 数据。 |
注意
您可以修改格式化文件,以便从字段编号或顺序与表列的编号或顺序不同的数据文件进行大容量导入。 有关更多信息,请参阅相关任务列表。
非 XML 格式化文件的示例
下面的示例显示了一个以前创建的非 XML 格式化文件 (myDepartmentIdentical-f-c.fmt
)。 该文件描述了 HumanResources.Department
示例数据库中的 AdventureWorks2022
表中每一列的字符数据字段。
生成的格式化文件 myDepartmentIdentical-f-c.fmt
包含以下信息:
12.0
4
1 SQLCHAR 0 7 "\t" 1 DepartmentID ""
2 SQLCHAR 0 100 "\t" 2 Name SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 100 "\t" 3 GroupName SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 24 "\r\n" 4 ModifiedDate ""
注意
有关显示与该非 XML 格式化文件示例相关的格式化文件字段的说明,请参阅非 XML 格式化文件的结构。
相关任务
- 创建格式化文件 (SQL Server)
- 使用格式化文件批量导入数据 (SQL Server)
- 使用格式化文件跳过表列 (SQL Server)
- 使用格式化文件跳过数据字段 (SQL Server)
- 使用格式化文件将表列映射到数据文件字段 (SQL Server)