2009-09-03 283 views
5

有沒有人知道我怎麼能看到哪一個表中的主鍵&外鍵?SQL Server 2008:找出表中的主鍵/外鍵?

編輯:感謝所有的答覆。我正在尋找一個SQL查詢來做到這一點。現在我正在寫一個工具,它可以列出所有DB的表格並顯示列。我想顯示哪些鍵是主鍵。

這是我讀出表目錄:

const string sqlSelectTable = "SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE " + 
             "FROM INFORMATION_SCHEMA.TABLES " + 
             "WHERE TABLE_TYPE = 'BASE TABLE' " + 
             "ORDER BY TABLE_TYPE,TABLE_NAME"; 

而且這是我得到的相關信息約一列:

const string sqlSelectTable = 
      "SELECT  COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH " + 
      "FROM   INFORMATION_SCHEMA.COLUMNS " + 
      "WHERE  (TABLE_NAME = @TABLE_NAME) " + 
      "ORDER BY ORDINAL_POSITION"; 

我必須創建一個內加入這樣看哪列是主鍵?

乾杯

回答

11

有關各表的主鍵,您可以使用此查詢:

SELECT 
    kc.name, 
    c.NAME 
FROM 
    sys.key_constraints kc 
INNER JOIN 
    sys.index_columns ic ON kc.parent_object_id = ic.object_id 
INNER JOIN 
    sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id 
WHERE 
    kc.type = 'PK' 

和對於外鍵,我相信這個查詢應該會爲你提供必要的信息:

SELECT 
    OBJECT_NAME(parent_object_id) 'Parent table', 
    c.NAME 'Parent column name', 
    OBJECT_NAME(referenced_object_id) 'Referenced table', 
    cref.NAME 'Referenced column name' 
FROM 
    sys.foreign_key_columns fkc 
INNER JOIN 
    sys.columns c 
     ON fkc.parent_column_id = c.column_id 
      AND fkc.parent_object_id = c.object_id 
INNER JOIN 
    sys.columns cref 
     ON fkc.referenced_column_id = cref.column_id 
      AND fkc.referenced_object_id = cref.object_id 

馬克

+0

沒有不起作用。它返回你創建的所有索引。 – Craig 2012-07-23 03:27:41

+0

@Craig:query#1 ** only **返回主鍵 - 查詢#2只返回** **外鍵 - 或者你會得到什麼? – 2012-07-23 04:50:25

3

在Management Studio中,展開表格,然後展開「列」項目。主鍵旁邊有一個鑰匙圖標。

要查看外鍵,請展開Constraints項目。

1

你可以開始:

SELECT 
    Table_Name as [TableName], 
    Column_Name as [ColumnName], 
    Constraint_Name as [Constraint], 
    Table_Schema as [Schema] 
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
ORDER BY 
    [TableName], 
    [ColumnName] 

(您可以通過表名過濾然後)

1
SELECT 
OBJECT_NAME(parent_object_id) 'Parent table', 
c.NAME 'Parent column name', 
OBJECT_NAME(referenced_object_id) 'Referenced table', 
cref.NAME 'Referenced column name' 
FROM 
sys.foreign_key_columns fkc 
INNER JOIN 
sys.columns c 
    ON fkc.parent_column_id = c.column_id 
     AND fkc.parent_object_id = c.object_id 
INNER JOIN 
sys.columns cref 
    ON fkc.referenced_column_id = cref.column_id 
     AND fkc.referenced_object_id = cref.object_id where OBJECT_NAME(parent_object_id) = 'tablename' 

如果你想獲得的所有表的外鍵關係,排除其他的where條款寫你的表名,而不是tablename