Как определить в запросе, есть ли у таблицы первичный ключ или нет
Можно ли написать запрос, который определяет, имеет ли таблица первичный ключ или нет?
SELECT * FROM sysobjects WHERE id = OBJECT_ID('TRS') and xtype = PK
Если у него нет первичного, то ничего не вернется.
В этой ссылке автор говорит об использовании Xtype
но, похоже, это старый термин.
1 ответ
Решение
Это даст вам ключ и имя столбца, если есть первичный ключ, иначе ничего.
SELECT sysobjects.name, syscolumns.name
FROM
sysobjects INNER JOIN
syscolumns ON syscolumns.id = sysobjects.id INNER JOIN
syskeys ON syskeys.id = sysobjects.id
WHERE
sysobjects.type = 'U' AND syskeys.type = 1