2016-03-29 12 views
5

SQL Server 2008では、主キーがまたがる列(列名)の一覧を取得する必要があります。PKの列の一覧を取得する

私は、これは、主キーといくつかの他の値ではなく、PK列の完全なリストを返す

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'); 

を試してみました。

他のどのテーブルに参加しなければなりませんか?

答えて

4

このよう

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' 

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' 
2
SELECT Col.Column_Name 
from 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab 
    INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col 
ON 
    Col.Constraint_Name = Tab.Constraint_Name 
    AND Col.Table_Name = Tab.Table_Name 
WHERE Constraint_Type = 'PRIMARY KEY' 

、あなたは、あなたのデータベース内のすべての主キー列のリストを取得したい場合

USE myDB; 
GO 

SELECT i.name AS IndexName, 
     OBJECT_NAME(ic.OBJECT_ID) AS TableName, 
     COL_NAME(ic.OBJECT_ID,ic.column_id) AS ColumnName 
FROM sys.indexes AS i 
INNER JOIN sys.index_columns AS ic ON i.OBJECT_ID = ic.OBJECT_ID 
     AND i.index_id = ic.index_id 
WHERE i.is_primary_key = 1 
+0

2016年に古い形式の暗黙的な結合を教えるのはなぜですか? – jarlh

+0

@jarlh: - 私の悪い、それを指していただきありがとうございます。それを更新しました! –

0

左外部結合を使用しない場合は、左外部結合を使用すると、左の表からすべての行が得られます。

関連する問題