准备用于批量导出或导入的数据

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

本部分讨论计划大容量导出操作时的相关注意事项以及大容量导入操作的要求。

注意

如果你不确定应如何针对批量导入设置数据文件的格式,可以使用 bcp 实用工具将数据从表导出到数据文件中。 此文件中每个数据字段的格式均显示了将数据大容量导入对应表列时所要求的格式。 对数据文件的各个字段使用相同的数据格式。

批量导出的数据文件格式注意事项

在使用 bcp 命令执行批量导出操作之前,请先考虑下列事项:

  • 将数据导出到文件时, bcp 命令使用指定的文件名自动创建数据文件。 如果该文件名已经存在,正在大容量复制到数据文件的数据将覆盖文件中的现有内容。

  • 要从表或视图批量导出到数据文件,需要对正在批量复制的表或视图具有 SELECT 权限。

  • SQL Server 可以使用并行扫描来检索数据。 因此,从 SQL Server 实例中批量导出的表行在数据文件中不一定按特定顺序排列。 要使批量导出的表行在数据文件中按特定顺序排列,请使用 queryout 选项进行查询以批量导出,并指定 ORDER BY 子句。

批量导入的数据文件格式要求

为了导入数据文件中的数据,该文件必须满足以下基本要求:

  • 数据必须以行和列的格式表示。

注意

数据文件结构不必与 SQL Server 表结构一致,因为可以在批量导入过程中跳过列或对列重新排序。

  • 数据文件中的数据格式必须是支持的格式,例如字符格式或本机格式。

  • 数据可以是字符格式或本机二进制格式(包括 Unicode)。

  • 若要使用bcp命令、BULK INSERT 语句或 INSERT ... SELECT * FROM OPENROWSET(BULK...) 语句导入数据,目标表必须已经存在。

  • 数据文件中的每个字段都必须与目标表中的对应列兼容。 例如,int 字段无法加载到 datetime 列。 有关详细信息,请参阅用于批量导入或批量导出的数据格式 (SQL Server)在使用 bcp 时指定兼容性数据格式 (SQL Server)

    注意

    要指定从数据文件导入的行子集,而不是整个文件,可以使用带有 -F <first_row> 开关和/或 -L <last_row> 开关的 bcp 命令。 有关详细信息,请参阅 bcp Utility

  • 若要从包含固定长度或固定宽度字段的数据文件导入数据,请使用格式化文件。 有关详细信息,请参阅 XML 格式化文件 (SQL Server)

  • 从 SQL Server 2017 (14.x)开始,将数据批量导入 SQL Server 时,可使用CSV 文件作为数据文件。 请注意,CSV 文件的字段终止符可以不是逗号。 若要能够用作大容量导入的数据文件,CSV 文件必须满足以下限制条件:

此外,从数据文件中将数据批量导入表还有以下要求:

  • 用户必须对表具有 INSERTSELECT 权限。 如果用户要使用涉及数据定义语言 (DDL) 操作的选项(例如禁用约束),还要具有 ALTER TABLE 权限。

  • 使用 BULK INSERTINSERT ... SELECT * FROM OPENROWSET(BULK...) 批量导入数据时,数据文件必须可通过SQL Server 进程的安全性配置文件(如果用户登录是由SQL Server 提供),或通过委托安全性下使用的 Microsoft Windows 登录进行访问以读取。 此外,用户还必须具有 ADMINISTER BULK OPERATIONS 权限以读取文件。

注意

由于不支持大容量导入到分区视图,因此无法将数据大容量导入到分区视图。