控制大容量导入的锁定行为

更新日期: 2005 年 12 月 5 日

bcp 命令、BULK INSERT 语句和 INSERT ... SELECT * FROM OPENROWSET(BULK...) 语句允许您指定在大容量导入操作期间锁定表。

指定表锁定后,在大容量导入操作期间采取大容量更新表级锁定。表锁定可以通过减少表中的锁争用来提高大容量导入操作的性能。

如果未使用表锁定,默认使用行级锁定,除非 table lock on bulk import 选项的设置为 on。使用 sp_tableoption 设置 table lock on bulk import 选项可以设置大容量导入操作过程中针对表的锁定行为。

table lock on bulk import 表锁定行为

Off

使用行级锁定

On

使用表级锁定

如果指定了表锁定,则使用 sp_tableoption 为该表设置的默认设置将在大容量导入操作过程中被替代。

ms180876.note(zh-cn,SQL.90).gif注意:
以并行方式从多个客户端大容量导入数据到表中时,不必使用表锁定,但这样做可以提高性能。

命令限定符

下表概述了用于在大容量导入命令中指定表锁定的限定符。

命令 限定符 限定符类型

bcp

-h"TABLOCK"

提示

BULK INSERT

TABLOCK

参数

INSERT ... SELECT * FROM OPENROWSET(BULK...)

WITH(TABLOCK)

表提示

ms180876.note(zh-cn,SQL.90).gif注意:
在 SQL Server 2005 中,针对带有聚集索引的表指定 TABLOCK 可以防止并行大容量导入数据。如果您想在这种情况下执行并行大容量导入,则不要使用 TABLOCK。有关并行大容量加载的详细信息,请参阅优化大容量导入指南

请参阅

概念

数据库引擎中的锁定

其他资源

bcp 实用工具
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
sp_tableoption (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助