获取PK的列列表

Ale*_*der 5 sql sql-server

在SQL Server 2008中,我想获取主键跨越的列(列名称)列表.

我试过了

SELECT * 
FROM sys.key_constraints 
LEFT JOIN sysconstraints ON (sys.key_constraints.object_id = sysconstraints.constid)
WHERE 
    type = 'PK' 
    AND parent_object_id = OBJECT_ID('dbo.permissioncache');
Run Code Online (Sandbox Code Playgroud)

这将返回主键和一些其他值,但不返回PK列的完整列表.

我还需要加入哪些其他表格?

Pரத*_*ீப் 5

试试这个方法

INFORMATION_SCHEMA 方法

SELECT TC.TABLE_NAME,
       COLUMN_NAME,
       TC.CONSTRAINT_NAME
FROM   INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
       INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cc
               ON cc.Constraint_Name = tc.Constraint_Name
                  AND cc.Table_Name = tc.Table_Name
WHERE  Constraint_Type = 'PRIMARY KEY'
       AND cc.Table_Name = 'Yourtable'
Run Code Online (Sandbox Code Playgroud)

Sys 选项,

SELECT t.name  AS TABLE_NAME,
       c.name  AS COLUMN_NAME,
       kc.name AS CONSTRAINT_NAME
FROM   sys.key_constraints AS kc
       JOIN sys.tables AS t
         ON t.object_id = kc.parent_object_id
       JOIN sys.index_columns AS ic
         ON ic.object_id = t.object_id
            AND ic.index_id = kc.unique_index_id
       JOIN sys.columns AS c
         ON c.object_id = t.object_id
            AND c.column_id = ic.column_id
WHERE  kc.type = 'PK'
       AND t.name = 'Yourtable' 
Run Code Online (Sandbox Code Playgroud)