SQL Server 2008: Find out primary/foreign key in Table?

后端 未结 5 864
再見小時候
再見小時候 2021-01-01 02:17

Does anyone know how I can see which are the primary & foreign keys in a table?

EDIT: Thanks for all the responses. I was looking for a SQL Query to do that. Rig

相关标签:
5条回答
  • 2021-01-01 02:32

    see the Querying the SQL Server System Catalog FAQ, How do I find the columns of a primary key for a specified table? and How do I find the columns of a foreign key for a specified table?

    EDIT: if you want to do it programmatically (which is not clear from your question), that is.

    0 讨论(0)
  • 2021-01-01 02:36

    In Management Studio, expand the table and then expand the Columns item. The primary key(s) has a key icon next to them.

    To see the foreign keys, expand the Constraints item.

    0 讨论(0)
  • 2021-01-01 02:36

    You can start with:

    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]
    

    (you can filter then by tableName)

    0 讨论(0)
  • 2021-01-01 02:37

    For the primary key on each table, you can use this query:

    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'
    

    and for the foreign key, I believe this query should get you the necessary information:

    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
    

    Marc

    0 讨论(0)
  • 2021-01-01 02:44
    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'
    

    If you want to get the foreign key relation of all the tables exclude the where clause else write your tablename instead of tablename

    0 讨论(0)
提交回复
热议问题