How to determine the primary key for a table in SQL Server?

后端 未结 8 1989
小蘑菇
小蘑菇 2020-12-16 07:13

What I\'d like to be able to do in SQL Server 2005 somehow is with a table name as input determine all the fields that make up the primary key. sp_columns doesn

相关标签:
8条回答
  • 2020-12-16 07:38

    -- ANSI SQL compatible and works from SQL70 onwards:

    select kcu.TABLE_SCHEMA, kcu.TABLE_NAME, kcu.CONSTRAINT_NAME, tc.CONSTRAINT_TYPE, kcu.COLUMN_NAME, kcu.ORDINAL_POSITION
      from INFORMATION_SCHEMA.TABLE_CONSTRAINTS as tc
      join INFORMATION_SCHEMA.KEY_COLUMN_USAGE as kcu
        on kcu.CONSTRAINT_SCHEMA = tc.CONSTRAINT_SCHEMA
       and kcu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
       and kcu.TABLE_SCHEMA = tc.TABLE_SCHEMA
       and kcu.TABLE_NAME = tc.TABLE_NAME
     where tc.CONSTRAINT_TYPE in ( 'PRIMARY KEY', 'UNIQUE' )
     order by kcu.TABLE_SCHEMA, kcu.TABLE_NAME, tc.CONSTRAINT_TYPE, kcu.CONSTRAINT_NAME, kcu.ORDINAL_POSITION;
    

    -- SQL Server 2005 specific:

    select s.name as TABLE_SCHEMA, t.name as TABLE_NAME
         , k.name as CONSTRAINT_NAME, k.type_desc as CONSTRAINT_TYPE
         , c.name as COLUMN_NAME, ic.key_ordinal AS ORDINAL_POSITION
      from sys.key_constraints as k
      join sys.tables as t
        on t.object_id = k.parent_object_id
      join sys.schemas as s
        on s.schema_id = t.schema_id
      join sys.index_columns as ic
        on ic.object_id = t.object_id
       and ic.index_id = k.unique_index_id
      join sys.columns as c
        on c.object_id = t.object_id
       and c.column_id = ic.column_id
     order by TABLE_SCHEMA, TABLE_NAME, CONSTRAINT_TYPE, CONSTRAINT_NAME, ORDINAL_POSITION;
    
    0 讨论(0)
  • 2020-12-16 07:45

    In SQL2005 this brings back a row that names the primary key and then gives a list of the column under "index_keys"

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