Получить список всех первичных ключей в базе данных - PullRequest
13 голосов
/ 24 мая 2011

Это лучший способ - получить список всех первичных ключей в базе данных - или есть что-то лучше?

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

Ответы [ 5 ]

41 голосов
/ 24 мая 2011
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

Этот запрос извлечет все ограничения первичного ключа из базы данных ... вам просто нужно выполнить этот запрос и ввести имя базы данных в первой строке

8 голосов
/ 30 мая 2015

Следующий синтаксис дает вам все ограничения в используемой базе данных.

select * from sys.key_constraints;
4 голосов
/ 24 мая 2011

смотреть ссылка

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

sp_pkeys будет возвращать строку для каждого столбец, который участвует в первичный ключ для. колонки вы, вероятно, наиболее заинтересованы это COLUMN_NAME и PK_NAME.

sp_helpconstraint перечислит все ограничения для, в том числе внешние ключи, которые ссылаются на таблицу. В первом наборе записей будет только столбец с именем объекта (вроде бесполезно, так как это то, что ты прошел) Во-вторых результат будет следующим столбцы: constraint_type, имя_крепления и ключ_ограничения.

2 голосов
/ 23 августа 2017

Если вам нужна информация о типе данных:

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'
0 голосов
/ 18 декабря 2014

Если вы делаете это из Java, вы также можете использовать метод getPrimaryKeys в объекте базы данных метаданных.Возможно, другие языки имеют аналогичные способы сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...