Share via


REFERENTIAL_CONSTRAINTS (Transact-SQL)

針對目前資料庫中的每個 FOREIGN KEY 條件約束,各傳回一個資料列。這個資訊結構描述檢視會傳回目前使用者有權限的物件之相關資訊。

若要從這些檢視中擷取資訊,請指定 INFORMATION_SCHEMA.view_name 的完整名稱。

資料行名稱

資料類型

描述

CONSTRAINT_CATALOG

nvarchar(128)

條件約束限定詞。

CONSTRAINT_SCHEMA

nvarchar(128)

包含條件約束之結構描述的名稱。

重要注意事項重要事項
請勿使用 INFORMATION_SCHEMA 檢視來判斷物件的結構描述。要尋找物件的結構描述,唯一可靠的方式就是查詢 sys.objects 目錄檢視或使用 OBJECT_SCHEMA_NAME 函數。

CONSTRAINT_NAME

sysname

條件約束名稱。

UNIQUE_CONSTRAINT_CATALOG

nvarchar(128)

UNIQUE 條件約束限定詞。

UNIQUE_CONSTRAINT_SCHEMA

nvarchar(128)

包含 UNIQUE 條件約束的結構描述名稱。

重要注意事項重要事項
請勿使用 INFORMATION_SCHEMA 檢視來判斷物件的結構描述。要尋找物件的結構描述,唯一可靠的方式就是查詢 sys.objects 目錄檢視或使用 OBJECT_SCHEMA_NAME 函數。

UNIQUE_CONSTRAINT_NAME

sysname

UNIQUE 條件約束。

MATCH_OPTION

varchar(7)

參考條件約束相符狀況。一律傳回 SIMPLE。這表示未定義相符項目。當符合下列條件之一時,狀況就視為相符:

  • 外部索引鍵資料行至少有一個值是 NULL。

  • 外部索引鍵資料行中的所有值都不是 NULL,且主索引鍵資料表中有一個含相同索引鍵的資料列。

UPDATE_RULE

varchar(11)

當 Transact-SQL 陳述式違反這個條件約束所定義的參考完整性時,所採取的動作。

傳回下列項目之一:

  • NO ACTION

  • CASCADE

  • SET NULL

  • SET DEFAULT

如果這個條件約束的 ON UPDATE 指定了 NO ACTION,就不會將條件約束所參考的主索引鍵之更新傳播到外部索引鍵。如果主索引鍵的這類更新會因為至少有一個外部索引鍵包含相同的值,而造成參考完整性違規,SQL Server 不會變更父系和進行參考的資料表。SQL Server 也會引發一則錯誤。

如果這個條件約束的 ON UPDATE 指定了 CASCADE,就會將主索引鍵值的變更傳播到外部索引鍵值。

DELETE_RULE

varchar(11)

當 Transact-SQL 陳述式違反這個條件約束所定義的參考完整性時,所採取的動作。

傳回下列項目之一:

  • NO ACTION

  • CASCADE

  • SET NULL

  • SET DEFAULT

如果這個條件約束的 ON DELETE 指定了 NO ACTION,就不會將條件約束所參考的主索引鍵之刪除傳播到外部索引鍵。如果主索引鍵的這類刪除會因為至少有一個外部索引鍵包含相同的值,而造成參考完整性違規,SQL Server 不會變更父系和進行參考的資料表。SQL Server 也會引發一則錯誤。

如果這個條件約束的 ON DELETE 指定了 CASCADE,主索引鍵值的變更就會自動傳播到外部索引鍵值。

範例

下列範例會傳回資料庫的 Sales 結構描述中每個 FOREIGN KEY 條件約束的相關資訊。

USE AdventureWorks;
GO

SELECT CONSTRAINT_SCHEMA, CONSTRAINT_NAME, UNIQUE_CONSTRAINT_SCHEMA, UNIQUE_CONSTRAINT_NAME, 
    MATCH_OPTION, UPDATE_RULE, DELETE_RULE
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = 'Sales';