2013-07-15 54 views
6

我想從一個表中的幾個帶來一個外鍵。在sql server的GUI界面中,如果我們展開表格選項,我們可以看到一個名爲「Keys」的文件夾,在這個文件夾中有一個主鍵和幾個外鍵。 在我的例子中,我有三個表格,Customer,Orders和Items。 Customer以Customer_ID爲主,Items以Item_ID爲主,Order以Order_ID爲主,外鍵Customer_nbr引用customer(Customer_ID)和外鍵item_nbr引用Items(Item_ID)。如何通過T-SQL查找表的特定外鍵?

所以在這個「鑰匙」文件夾下有那些按鍵的名稱,如:「FK_ 訂單 _Customer__38996AB5」

的問題是,後面的顧客詞數「38996AB5」是不固定的,如果你刪除約束然後重新建立它們將被改變(出於安全原因等)。

所以我正在尋找一個SQL命令,可以輸入以獲得該密鑰,無論它是什麼樣子。在邏輯上,我可以使用關鍵字「LIKE」(即... like ='FK_ Orders _Customer __%'),但我無法知道如何或放在哪裏。

在此先感謝。

+1

這就是我推薦你總是明確地給你的外鍵約束創建它們的有意義的名字的主要原因! –

+0

我同意馬克。明確的名稱應該在創建過程中給出這個確切的原因...............這是dba-101和dba-301,恕我直言,區別。我們有一個公司的標準,所有的對象名稱必須是明確的......沒有一個微軟的自動巫術命名。 – granadaCoder

回答

3

用途:

SELECT * 
FROM sys.foreign_keys 
WHERE name LIKE '%yourForeignKeyName%' 
4

這裏是另外一個版本。你可以通過表格和父表/列名進行過濾。

SELECT 
    [ForeignKey] = f.name 
, [TableName] = OBJECT_NAME(f.parent_object_id), COL_NAME(fc.parent_object_id,fc.parent_column_id) 
, [ReferenceTableName] = OBJECT_NAME (f.referenced_object_id) 
, ReferenceColumnName = COL_NAME(fc.referenced_object_id, fc.referenced_column_id) 
FROM 
sys.foreign_keys AS f 
INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id 

更好的主意:

名稱您的FK上創造的。

ALTER TABLE [dbo].ChildTable 
ADD CONSTRAINT ChildTableToParentTableFK /* A strong name */ 
    FOREIGN KEY (ParentTableKey) 
     REFERENCES [dbo].ParentTable (ParentTableKey ) 
GO