當您建立資料表時,可以建立 FOREIGN KEY 條件約束作為資料表定義的一部份。如果已經存在資料表,您可以加入 FOREIGN KEY 條件約束,前提是 FOREIGN KEY 條件約束已連結到其他或相同資料表中現有的 PRIMARY KEY 條件約束或 UNIQUE 條件約束。資料表可包含多個 FOREIGN KEY 條件約束。
如果已經存在 FOREIGN KEY 條件約束,您可以修改或刪除它。例如,您可能想要資料表的 FOREIGN KEY 條件約束可以參考其他資料行。但是,您無法變更已使用 FOREIGN KEY 條件約束定義的資料行長度。
附註: |
|---|
| 若要修改 FOREIGN KEY 條件約束,您必須先刪除現有的 FOREIGN KEY 條件約束,然後使用新的定義來重新建立。 |
刪除 FOREIGN KEY 條件約束,可移除外部索引鍵資料行與其他資料表中相關的主索引鍵 (或是 UNIQUE 條件約束) 資料行之間的參考完整性需求。
若要在建立資料表時建立 FOREIGN KEY 條件約束
若要在現有的資料表中建立 FOREIGN KEY 條件約束
如何:建立資料表之間的關聯性 (Visual Database Tools)
若要刪除 FOREIGN KEY 條件約束
使用 WITH NOCHECK 來強制執行 FOREIGN KEY 條件約束
當您將 FOREIGN KEY 條件約束加入資料表內現有的一或多個資料行時,SQL Server 2005 Database Engine 預設會檢查資料行中的現有資料,以確保所有值 (除了 NULL 以外) 都存在於所參考的 PRIMARY KEY 或 UNIQUE 條件約束的資料行中。不過,透過指定 WITH NOCHECK,Database Engine 可避免針對新的條件約束檢查資料行內的資料,並且不管資料行內的資料為何均加入新的條件約束。當現有資料已符合新 FOREIGN KEY 條件約束時,或商務規則要求從此點開始才強制執行條件約束時,WITH NOCHECK 選項相當有用。
不過,在加入條件約束而不檢查現有資料時要特別小心,因為這會略過 Database Engine 中強制執行資料表資料完整性的控制項。
若要在建立 FOREIGN KEY 條件約束時不檢查現有的資料
停用 FOREIGN KEY 條件約束
您可以針對特定作業 (例如 INSERT 作業、UPDATE 作業和複寫處理) 停用現有的 FOREIGN KEY 條件約束。
- INSERT 與 UPDATE 陳述式
停用 FOREIGN KEY 條件約束,就可以直接修改資料表中的資料,而不需經過條件約束的驗證。如果新的資料將會違反條件約束,或條件約束只需套用至資料庫內的現有資料,那麼可在執行 INSERT 和 UPDATE 陳述式時關閉 FOREIGN KEY 條件約束。
附註:任何在相關主索引鍵上定義的串聯式動作,都不會在包含已停用外部索引鍵的資料列上執行。 - 複寫處理
如果是來源資料庫專屬的條件約束,在複寫過程中就可關閉 FOREIGN KEY 條件約束。在複寫資料表時,資料表定義和資料會從來源資料庫複製到目的地資料庫。如果 FOREIGN KEY 條件約束是來源資料庫專屬的條件約束,可是並未在複寫時關閉,它們將會禁止新的資料輸入目的地資料庫內,但這是沒有必要的。如需詳細資訊,請參閱<使用 NOT FOR REPLICATION 控制條件約束、識別和觸發程序>。
若要停用 INSERT 和 UPDATE 陳述式的 FOREIGN KEY 條件約束
如何:使用 INSERT 和 UPDATE 陳述式停用外部索引鍵條件約束 (Visual Database Tools)
若要停用複寫的 FOREIGN KEY 條件約束
如何:停用複寫的外部索引鍵條件約束 (Visual Database Tools)
若要取得有關 FOREIGN KEY 條件約束的資訊
sys.foreign_keys (Transact-SQL)
若要取得有關組成 FOREIGN KEY 條件約束之資料行的資訊
sys.foreign_key_columns (Transact-SQL)