建立外部索引鍵關聯性
此主題描述如何使用 SQL Server Management Studio 或 Transact-SQL,在 SQL Server 2012 中建立外部索引鍵關聯性。 當想要將一個資料表的資料列,與其他資料表的資料列建立相關時,可以建立兩者間的關聯性。
本主題內容
開始之前:
限制事項
安全性
使用下列方法建立外部索引鍵關聯性:
SQL Server Management Studio
Transact-SQL
開始之前
限制事項
外部索引鍵條件約束不一定只能連結到另一個資料表中的主索引鍵條件約束;它也可以定義成參考另一個資料表中 UNIQUE 條件約束的資料行。
在 FOREIGN KEY 條件約束的資料行中輸入 NULL 以外的值時,值必須在參考的資料行中;否則,系統會傳回外部索引鍵違規錯誤訊息。 若要確定會驗證複合外部索引鍵條件約束的所有值,請對所有參與的資料行指定 NOT NULL。
FOREIGN KEY 條件約束只能參考在相同伺服器之相同資料庫內的資料表。 跨資料庫參考完整性必須利用觸發程序來實作。 如需詳細資訊,請參閱<CREATE TRIGGER (Transact-SQL)>。
FOREIGN KEY 條件約束可以參考相同資料表中的另一個資料行。 這稱為自我參考。
資料行層級上指定的 FOREIGN KEY 條件約束只能列出一個參考資料行。 這個資料行必須有定義了條件約束的資料行之相同資料類型。
資料表層級上指定的 FOREIGN KEY 條件約束,必須有與條件約束資料行清單中資料行一樣多的參考資料行。 每個參考資料行的資料類型,也必須與資料行清單中的對應資料行相同。
在資料表所能包含參考其他資料表的 FOREIGN KEY 條件約束數目,及其他資料表所擁有參考特定資料表的 FOREIGN KEY 條件約束數目上,Database Engine 並沒有預先定義的限制。 不過,FOREIGN KEY 條件約束的實際可用數目,會受到硬體組態及資料庫和應用程式設計的限制。 建議資料表所包含的 FOREIGN KEY 條件約束數目不要超出 253 個,參考資料表的 FOREIGN KEY 條件約束數目也不要超出 253 個。
暫存資料表不會強制執行 FOREIGN KEY 條件約束。
如果在 CLR 使用者定義的類型資料行上定義外部索引鍵,類型的實作必須支援二進位順序。 如需詳細資訊,請參閱<CLR 使用者定義型別>。
只有在所參考的主索引鍵也定義成 varchar(max) 類型時,varchar(max) 類型的資料行才能夠參與 FOREIGN KEY 條件約束。
安全性
權限
建立具有外部索引鍵的新資料表,需要資料庫中的 CREATE TABLE 權限及建立資料表的結構描述之 ALTER 權限。
在現有資料表中建立外部索引鍵需要此資料表的 ALTER 權限。
[Top]
使用 SQL Server Management Studio
若要在資料表設計工具建立外部索引鍵關聯性
在 [物件總管] 中,以滑鼠右鍵按一下位於關聯性之外部索引鍵端上的資料表,然後按一下 [設計]。
資料表會在 [資料表設計工具] 中開啟。
從 [資料表設計工具] 功能表中,按一下 [關聯性]。
在 [外部索引鍵關聯性] 對話方塊中,按一下 [加入]。
關聯性會出現在 [選取的關聯性] 清單中,並顯示系統提供的名稱,格式為 FK_<tablename>_<tablename>,其中 tablename 為外部索引鍵資料表的名稱。
在 [選取的關聯性] 清單中,按一下關聯性。
在方格的右側按一下 [資料表和資料行規格],再按屬性右邊的省略符號 ([…])。
在 [資料表和資料行] 對話視窗中的 [主索引鍵] 下拉式清單 (Drop-Down List) 中,選擇將要成為關聯性主索引鍵端的資料表。
在方格的下方,選擇組成資料表主索引鍵的資料行。 在每個資料行左側的鄰近方格資料格,選擇對應到外部索引鍵資料表的外部索引鍵資料行。
[資料表設計工具] 會提供關聯性的建議名稱。 若要變更這個名稱,請編輯 [關聯性名稱] 文字方塊的內容。
選擇 [確定] 建立關聯性。
[Top]
使用 Transact-SQL
在新的資料表建立外部索引鍵
在 [物件總管] 中,連接到 Database Engine 的執行個體。
在標準列上,按一下 [新增查詢]。
將下列範例複製並貼到查詢視窗中,然後按一下 [執行]。 此範例會建立資料表並在 TempID 資料行上定義外部索引鍵條件約束,而此資料行會參考 Sales.SalesReason 資料表中的 SalesReasonID 資料行。 ON DELETE CASCADE 和 ON UPDATE CASCADE 子句用來確定對 Sales.SalesReason 資料表所做的變更會自動傳播至 Sales.TempSalesReason 資料表。
USE AdventureWorks2012; GO CREATE TABLE Sales.TempSalesReason (TempID int NOT NULL, Name nvarchar(50), CONSTRAINT PK_TempSales PRIMARY KEY NONCLUSTERED (TempID), CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID) REFERENCES Sales.SalesReason (SalesReasonID) ON DELETE CASCADE ON UPDATE CASCADE );GO
在現有的資料表建立外部索引鍵
在 [物件總管] 中,連接到 Database Engine 的執行個體。
在標準列上,按一下 [新增查詢]。
將下列範例複製並貼到查詢視窗中,然後按一下 [執行]。 此範例會在 TempID 資料行上建立外部索引鍵,並參考 Sales.SalesReason 資料表中的 SalesReasonID 資料行。
USE AdventureWorks2012; GO ALTER TABLE Sales.TempSalesReason ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID) REFERENCES Sales.SalesReason (SalesReasonID) ON DELETE CASCADE ON UPDATE CASCADE ; GO
如需詳細資訊,請參閱<ALTER TABLE (Transact-SQL)>、<CREATE TABLE (Transact-SQL)>和<table_constraint (Transact-SQL)>。
[Top]