MSDN Страница на GetSchema и коллекция PrimaryKeys
.Однако он не работает с SQL Server, как сказано в начале
Некоторые коллекции схем являются неполными, например, SQL Server, который не содержит коллекции для первичных ключей.
Фактически, его чтение подразумевает, что GetSchema не является надежным средством извлечения схемы из базы данных.
Другой вариант, который поддерживается большинством основных СУБД, заключается в запросе information_schema для всех первичных ключей.
select *
from information_schema.TABLE_CONSTRAINTS
where CONSTRAINT_TYPE = 'PRIMARY KEY'
Вы можете присоединить это к KEY_COLUMN_USAGE для столбцов по порядку расположения
select PK.TABLE_SCHEMA, PK.TABLE_NAME, C.ORDINAL_POSITION, C.COLUMN_NAME
from information_schema.TABLE_CONSTRAINTS PK
inner join information_schema.KEY_COLUMN_USAGE C
on C.TABLE_SCHEMA = PK.TABLE_SCHEMA
and C.TABLE_CATALOG = PK.TABLE_CATALOG
and C.TABLE_NAME = PK.TABLE_NAME
where PK.CONSTRAINT_TYPE = 'PRIMARY KEY'
Обратите внимание, что, хотя information_schema имеет хорошую поддержку, она может отличаться небольшими способами.В SQL Server table_catalog (= имя db) всегда ограничивается текущим db, тогда как в MySQL он будет возвращать таблицы из любого каталога (db), поэтому вам может понадобиться фильтр каталога для точности.