web-dev-qa-db-ja.com

データベース内のすべての主キーのリストを取得する

これは-データベース内のすべての主キーのリストを取得するための最良の方法ですか、それとももっと良い方法がありますか?

SELECT
KCU.TABLE_NAME AS Table_Name,
KCU.CONSTRAINT_NAME AS Constraint_Name,
KCU.COLUMN_NAME AS COLUMN_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE 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 = 'PRIMARY KEY'
ORDER BY
KCU.TABLE_SCHEMA, KCU.TABLE_NAME, KCU.CONSTRAINT_NAME
14
psam

見てください リンク

EXEC sp_pkeys '<tablename>'
EXEC sp_helpconstraint '<tablename>'

sp_pkeysは、の主キーに関係する各列の行を返します。最も関心があると思われる列は、COLUMN_NAMEとPK_NAMEです。

sp_helpconstraintは、テーブルを参照する外部キーを含む、のすべての制約をリストします。最初のレコードセットには、オブジェクト名と呼ばれる列しかありません(渡したものなので、役に立たないようなものです)。 2番目の結果セットには、constraint_type、constraint_name、constraint_keysの列があります。

4
Haim Evgi
USE databasename; 

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

このクエリは、データベースからすべての主キー制約を抽出します...このクエリを実行して、最初の行にデータベース名を入力するだけです

41
Kapil

次の構文は、使用中のデータベースのすべての制約を提供します。

select * from sys.key_constraints;
8
Ashraf Abusada

データ型情報も必要な場合:

SELECT 
    so.name 'Table Name',
    c.name 'Column Name',
    t.Name 'Data type',
    c.max_length 'Max Length',
    c.precision ,
    c.scale ,
    c.is_nullable,
    ISNULL(i.is_primary_key, 0) 'Primary Key'
FROM    
    sys.columns c
INNER JOIN 
    sys.types t ON c.user_type_id = t.user_type_id
LEFT OUTER JOIN 
    sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
LEFT OUTER JOIN 
    sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
INNER JOIN 
    sysobjects so ON c.object_id = so.id
WHERE
    i.is_primary_key = 1 and 
    so.xtype = 'U'
Order By 'Table Name', 'Column Name'
2
Jmoney38

Java=からこれを実行している場合は、データベースメタデータオブジェクトでgetPrimaryKeysメソッドを使用することもできます。他の言語でも同様の方法で行うことができます。

0
dan b