控制大量匯入的鎖定行為
更新: 2005 年 12 月 5 日
bcp 命令、BULK INSERT 陳述式和 INSERT ...SELECT * FROM OPENROWSET(BULK...) 陳述式可讓您指定在大量匯入作業期間鎖定資料表。
當您指定資料表鎖定時,在大量匯入作業期間會採用大量更新資料表層次的鎖定。資料表鎖定會減少資料表上的鎖定爭用,而提升大量匯入作業的效能。
如果不使用資料表鎖定,則預設會使用資料列層級的鎖定,除非 table lock on bulk load 選項設定為 on。使用 sp_tableoption 設定 table lock on bulk load 選項,可設定在大量匯入作業期間資料表的鎖定行為。
大量匯入時的資料表鎖定 | 資料表鎖定行為 |
---|---|
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)