В вызове GetSchemaTable
на SqlConnection
нет ничего, что позволило бы вам выяснить это.
Может показаться , что вы можетеиспользуя значение столбца IsKey
, которое должно возвращать true для всего, что способствует уникальной идентификации записи в таблице.Однако из документации для столбца IsKey
(выделено мной):
true: столбец является одним из набора столбцов в наборе строк, которые вместе взятые однозначно идентифицируют строку.Набор столбцов с IsKey, установленным в true, должен однозначно идентифицировать строку в наборе строк.Не требуется, чтобы этот набор столбцов был минимальным набором столбцов.Этот набор столбцов может быть сгенерирован из первичного ключа базовой таблицы, уникального ограничения или уникального индекса .
Из-за этого вы не можете гарантировать, что он способствуетсам по себе первичный ключ.
Теперь, если все, что вам нужно, это что-то для уникальной идентификации строки, то IsKey
подойдет, поскольку первичный ключ не всегда является способом уникальной идентификации строки (например,Вы можете иметь естественные идентификаторы с уникальным индексом).Даже если у вас есть первичный ключ и уникальный индекс с другими столбцами, значения всех этих столбцов в комбинации всегда будут уникальными.
Однако, если вам особенно нужно взглянуть на столбцы, составляющие основнойключ, то GetSchemaTable
не даст вам необходимую информацию.Вместо этого вы можете просто вызвать системную хранимую процедуру sp_pkeys
, чтобы найти имена столбцов, которые способствуют созданию первичного ключа.