大容量导入数据的基本原则

只能使用 bcp 命令、BULK INSERT 语句或 OPENROWSET(BULK) 函数从数据文件大容量导入数据。

注意注意

可以编写从对象而非文本文件大容量导入数据的自定义应用程序。若要从内存缓冲区大容量导入数据,请使用 SQL Server Native Client (ODBC) 应用程序编程接口 (API) 的 bcp 扩展或 OLE DB IRowsetFastLoad 接口。若要从 C# 数据表大容量导入数据,请使用 ADO.NET 大容量复制 API,即 SqlBulkCopy

注意注意

不支持将数据大容量导入到远程表中。

在将数据文件中的数据大容量导入到 Microsoft SQL Server 实例时,请使用以下原则:

  • 为用户帐户获取所需的权限。

    使用 bcp 实用工具、BULK INSERT 语句或 INSERT ...SELECT * FROM OPENROWSET(BULK...) 语句的用户帐户必须具有表的所需权限,这些权限由表所有者分配。有关每种方法所需权限的详细信息,请参阅 bcp 实用工具OPENROWSET (Transact-SQL)BULK INSERT (Transact-SQL)

  • 使用大容量日志恢复模式。

    此原则适用于使用完整恢复模式的数据库。对无索引表(“堆”)执行大容量操作时,大容量日志恢复模式非常有用。使用大容量日志恢复有助于防止事务日志出现空间不足的情况,因为大容量日志恢复不会插入日志行。有关大容量日志恢复模式的详细信息,请参阅在大容量日志恢复模式下备份

    建议您在执行大容量导入操作之前,先将数据库改为使用大容量日志恢复模式。之后应立即将数据库重设为完整恢复模式。有关详细信息,请参阅有关从完整恢复模式或大容量日志恢复模式切换的注意事项

    注意注意

    有关如何在大容量导入操作期间最小化日志记录的详细信息,请参阅在大容量导入中按最小方式记录日志的前提条件

  • 大容量导入数据后进行备份。

    对于使用简单恢复模式的数据库,建议您在大容量导入操作完成后执行完整备份或差异备份。有关详细信息,请参阅创建 SQL Server 数据库的完整备份和差异备份

    对于大容量日志恢复模式或完整恢复模式,只需执行日志备份就足够了。有关详细信息,请参阅创建事务日志备份

  • 删除表索引以提高大型大容量导入操作的性能。

    在导入的数据量与表中已有数据量相比很大时,请使用此原则。在这种情况下,执行大容量导入操作之前删除表中的索引可显著提高性能。

    注意注意

    如果加载的数据量与表中已有的数据量相比较小时,删除索引会适得其反。因为重新生成索引所需的时间可能要比大容量导入操作期间所节省的时间更长。

    有关详细信息,请参阅优化大容量导入性能

  • 查找并删除数据文件中的隐藏字符。

    许多实用工具和文本编辑器都会显示隐藏字符,这些隐藏字符通常位于数据文件末尾。在大容量导入操作期间,ASCII 数据文件中的隐藏字符会导致问题,这些问题会引发“发现意外空字符”错误。查找并删除所有隐藏字符有助于避免此问题。