准备用于批量导出或导入的数据
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics 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 文件必须符合以下限制:数据字段不能包含字段终止符。
如果需要将任何字段用引号 (
""
) 括起来,则必须将所有数据字段用引号括起来。要从 Microsoft FoxPro 或 Visual FoxPro 表 (
.dbf
) 文件或 Microsoft Excel 工作表 (.xls) 文件中批量导入数据,需要将数据转换为 CSV 文件以满足前面的限制条件。 文件扩展名通常将为.csv
。 然后便可以在 SQL Server 批量导入操作中使用.csv
文件作为数据文件。在 32 位系统(SQL Server 2014 (12.x) 及更低版本)上, CSV 数据导入 SQL Server 表时,可以使用OPENROWSET 和 OLE DB Provider for Jet,无需批量导入优化。 基于位于数据源所在目录的
schema.ini
文件定义的架构,Jet 将文本文件作为表处理。 CSV 数据中,schema.ini
文件中的参数之一是"FORMAT=CSVDelimited"
。 要使用此解决方案,需要了解 Jet Text IISAM 的操作方法(连接字符串语法、schema.ini
用法、注册表设置选项等)。此信息的最佳来源是 Microsoft Access 帮助和知识库 (KB) 文章。 有关详细信息,请参阅初始化文本数据源驱动程序、如何通过链接服务器使用 SQL Server 7.0 分布式查询来查询安全的 Access 数据库、如何使用 Jet OLE DB Provider 4.0 连接到 ISAM 数据库,以及如何使用 Jet Provider 的文本 IIsam 打开带分隔符的文本文件。
此外,从数据文件中将数据批量导入表还有以下要求:
用户必须对表具有
INSERT
和SELECT
权限。 如果用户要使用涉及数据定义语言 (DDL) 操作的选项(例如禁用约束),还要具有ALTER TABLE
权限。使用
BULK INSERT
或INSERT ... SELECT * FROM OPENROWSET(BULK...)
批量导入数据时,数据文件必须可通过SQL Server 进程的安全性配置文件(如果用户登录是由SQL Server 提供),或通过委托安全性下使用的 Microsoft Windows 登录进行访问以读取。 此外,用户还必须具有ADMINISTER BULK OPERATIONS
权限以读取文件。
注意
由于不支持大容量导入到分区视图,因此无法将数据大容量导入到分区视图。