Share via


控制大量匯入作業的條件約束檢查

更新: 2006 年 12 月 12 日

大量匯入資料時,您可以控制大量匯入作業是否要強制實施 CHECKFOREIGN KEY 條件約束。*「條件約束」*是一種商務規則,它是施加在資料行上以定義其有效值,例如,包含電話分機的資料行之條件約束可能需要 #### 的格式。定義和檢查條件約束是強制資料完整性的標準機制。Microsoft 建議您在累加大量匯入時,都能使用條件約束檢查。

您有時可能想要忽略條件約束。如果您輸入的資料包含會違反條件約束的資料行,即為一例。若要忽略條件約束,您可以先載入資料,再使用 Transact-SQL 陳述式來清除資料。

如果在大量匯入作業之前,資料表不是空的,重新驗證條件約束的成本,可能會超過在累加資料上套用 CHECK 和 FOREIGN KEY 條件約束的成本。在您匯入有問題的資料之後,您必須使用 Transact-SQL 來清除匯入的資料。

ms186247.note(zh-tw,SQL.90).gif重要事項:
停用條件約束時,可能會執行結構描述修改鎖定以更新中繼資料。這可能會影響其他命令 (例如線上索引建立) 或交易。例如,存取目標資料表的快照集隔離交易,可能會因為同時執行的 DDL 變更而失敗。

如需條件約束的詳細資訊,請參閱<條件約束>。

在大量匯入作業期間,條件約束檢查的行為取決於作業所使用的命令。根據預設,bcp 命令和 BULK INSERT 陳述式會忽略條件約束。相反地,若是 INSERT ...SELECT * FROM OPENROWSET(BULK...) 陳述式,預設會檢查條件約束。

下表摘要說明大量匯入命令預設的條件約束檢查行為。

命令 預設行為

bcp

忽略條件約束

BULK INSERT

忽略條件約束

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

檢查條件約束

每個大量匯入命令都提供限定詞 (qualifier),讓您變更條件約束的處理方式 (請參閱下列部分的說明)。

以 bcp 或 BULK INSERT 來檢查條件約束

根據預設,由 bcp 命令或 BULK INSERT 陳述式執行的大量匯入作業期間,會忽略條件約束。

bcp 命令和 BULK INSERT 陳述式可讓您指定在大量匯入作業期間強制實施條件約束。強制實施條件約束會減緩大量匯入作業的速度,但可確保所有插入的資料都不會違反任何現有的條件約束。下表摘要說明在大量匯入作業期間,您可用來指定強制實施條件約束的限定詞。

命令 限定詞 限定詞類型

bcp

-h"CHECK_CONSTRAINTS"

提示

BULK INSERT

CHECK_CONSTRAINTS

引數

如需詳細資訊,請參閱<bcp 公用程式>與<BULK INSERT (Transact-SQL)>。

忽略 INSERT ...SELECT * FROM OPENROWSET(BULK...) 中的條件約束

根據預設,INSERT 會檢查 CHECK 和 FOREIGN KEY 條件約束。不過,INSERT ...SELECT * FROM OPENROWSET(BULK...) 陳述式可讓您覆寫 CHECK 和 FOREIGN KEY 條件約束的檢查。 .

ms186247.note(zh-tw,SQL.90).gif附註:
您無法停用 UNIQUE、PRIMARY KEY 或 NOT NULL 條件約束。

下表摘要說明忽略 CHECK 和 FOREIGN KEY 條件約束的資料表提示。

命令 限定詞 限定詞類型

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

WITH (IGNORE_CONSTRAINTS)

資料表提示

下列範例說明如何使用此限定詞。如需 IGNORE_CONSTRAINTS 提示的詳細資訊,請參閱<資料表提示 (Transact-SQL)>。

驗證匯入的資料

如果您在大量匯入作業期間忽略了條件約束,則違反現有條件約束的資料就可以插入到資料表中。因此,資料表上所每個忽略的條件約束,在 sys.check_constraintssys.foreign_keys 目錄檢視中會標示為 is_not_trusted。您必須在某個點上,檢查整份資料表的條件約束。

您可以使用會測試條件約束條件的 Transact-SQL 查詢或預存程序,手動檢查匯入的資料,找出違反條件約束的匯入資料表資料列。

請參閱

其他資源

bcp 公用程式
BULK INSERT (Transact-SQL)
DBCC CHECKCONSTRAINTS (Transact-SQL)
INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
SELECT (Transact-SQL)
資料表提示 (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 12 月 12 日

變更的內容:
  • 修訂主題,指出 CHECK 和 FOREIGN KEY 條件約束是一起控制的。