关于大容量导入和大容量导出操作
Microsoft SQL Server 2005 支持从 SQL Server 表中大容量导出数据以及将大容量数据导入 SQL Server 表或未分区的视图。可以使用下列基本方法:
方法 | 说明 | 导入数据 | 导出数据 |
---|---|---|---|
大容量导出数据和大容量导入数据并生成格式化文件的命令行实用工具 (Bcp.exe)。 |
支持 |
支持 |
|
将数据直接从数据文件导入数据库表或未分区视图的 Transact-SQL 语句。 |
支持 |
不支持 |
|
通过在 INSERT 语句中指定 OPENROWSET(BULK…) 函数来选择数据,从而使用 OPENROWSET 大容量行集提供程序将数据大容量导入 SQL Server 表的 Transact-SQL 语句。 |
支持 |
不支持 |
进程内与进程外操作
BULK INSERT 语句和 OPENROWSET(BULK) 函数通过 SQL Server 在进程内执行,共享同一内存地址空间。因为数据文件是通过 SQL Server 进程打开的,所以不能在客户端进程和 SQL Server 进程之间复制数据。有关使用 BULK INSERT 或 INSERT ... SELECT * FROM OPENROWSET(BULK...) 导入数据时的安全注意事项,请参阅使用 BULK INSERT 或 OPENROWSET(BULK...) 导入大容量数据。
与之相反,bcp 实用工具在进程外运行。 若要跨进程内存空间移动数据,bcp 必须使用“进程间数据封送”**。“进程间数据封送”**是将方法调用的参数转换成字节流的过程。该过程会显著增加处理器的负荷。但是,由于 bcp 会分析数据并将数据转换为客户端进程中的本机存储格式,它可以减轻 SQL Server 进程的分析和数据转换负荷。因此,如果您具有 CPU 限制,则通过使用 bcp 而非 BULK INSERT 或 INSERT ... SELECT * FROM OPENROWSET(BULK),可以在具有多个 CPU 的计算机或者不同的计算机上获得更好的大容量导入性能。
格式化文件
bcp 实用工具、BULK INSERT 和 INSERT ...SELECT * FROM OPENROWSET(BULK...) 都支持使用专门的“格式化文件”**来存储数据文件中每个字段的格式信息。格式化文件还可以包含相应的 SQL Server 表的有关信息。格式化文件可以用于提供从 SQL Server 实例大容量导出数据和向其中大容量导入数据时所需的所有格式信息。
格式化文件提供了一种解释导入期间数据文件中数据的格式以及设置导出期间数据文件中数据格式的灵活方式。这种灵活性使得解释数据时无需编写专用代码,也无需为满足 SQL Server 或外部应用程序的特殊需要而重新设置数据的格式。例如,如果将要加载的数据大容量导出到某个需要逗号分隔值的应用程序,则可以使用格式化文件将逗号作为字段终止符插入导出的数据中。
SQL Server 2005 支持两种格式化文件:XML 格式化文件和非 XML 格式化文件。早期版本的 SQL Server 支持非 XML 格式化文件;SQL Server 2005 中新增了 XML 格式化文件。
bcp 实用工具是唯一能够生成格式化文件的工具。有关详细信息,请参阅创建格式化文件。有关格式化文件的详细信息,请参阅用来导入或导出数据的格式化文件。
注意: |
---|
如果在大容量导出或导入操作期间未提供格式化文件,用户可以选择在命令行处覆盖默认格式。 |
查询处理器和大容量导入
若要将数据大容量导入 SQL Server 实例中,应将 bcp实用工具、BULK INSERT 语句和 INSERT ... SELECT * FROM OPENROWSET(BULK...) 语句与查询处理器一起使用。
这三种方法都可以将数据文件中的数据转换为 OLE DB 行集。但是转换方法不同,如下所示:
- bcp 实用工具读取数据文件并将 TDS 流发送到 SQL Server 大容量复制程序 (BCP) API,该程序将数据转换为 OLE DB 行集中。
- BULK INSERT 和 OPENROWSET 大容量行集提供程序都是直接将文件数据转换为 OLE DB 行集中。
查询处理器将 OLE DB 行集插入目标表,查询处理器将规划并优化每个操作。
性能注意事项
导入大量数据时,性能的考虑也是非常重要的。在某些情况下,可以通过更改大容量导入或大容量导出操作处理下列一项或多项内容的方式来提高性能:
- 批处理开关
- CHECK 约束的约束检查
- 如何记录大容量事务。它与通常使用完整恢复模式的数据库相关。
- 排序导出的数据
- 并行数据导入
- 表锁定
- 触发器执行
有关详细信息,请参阅优化大容量导入性能。
注意: |
---|
不存在针对大容量导出操作的特殊优化技术。这些操作只是使用 SELECT 语句从源表选择数据。 |
请参阅
概念
导入大容量数据的基本原则
用于导入或导出数据的数据格式
大容量导入和导出数据的方案
单个 SQL 语句处理
其他资源
Performing Bulk Load of XML Data (SQLXML 4.0)
SQL Server Integration Services
Performing Bulk Copy Operations
bcp 实用工具
BULK INSERT (Transact-SQL)
用来导入或导出数据的格式化文件
OPENROWSET (Transact-SQL)