控制大容量导入的锁定行为
更新日期: 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 为该表设置的默认设置将在大容量导入操作过程中被替代。
注意: |
---|
以并行方式从多个客户端大容量导入数据到表中时,不必使用表锁定,但这样做可以提高性能。 |
命令限定符
下表概述了用于在大容量导入命令中指定表锁定的限定符。
命令 | 限定符 | 限定符类型 |
---|---|---|
bcp |
-h"TABLOCK" |
提示 |
BULK INSERT |
TABLOCK |
参数 |
INSERT ... SELECT * FROM OPENROWSET(BULK...) |
WITH(TABLOCK) |
表提示 |
注意: |
---|
在 SQL Server 2005 中,针对带有聚集索引的表指定 TABLOCK 可以防止并行大容量导入数据。如果您想在这种情况下执行并行大容量导入,则不要使用 TABLOCK。有关并行大容量加载的详细信息,请参阅优化大容量导入指南。 |
请参阅
概念
其他资源
bcp 实用工具
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
sp_tableoption (Transact-SQL)