Как найти уникальные ключи в таблице в SQL - PullRequest
0 голосов
/ 13 марта 2020

У меня более 100 таблиц в SQL, которые не имеют первичных ключей или индексов для столбцов.

Я вручную проверяю каждый столбец для каждой таблицы, чтобы увидеть, имеют ли они уникальные ключи или нет.

Как запросить, чтобы получить уникальные ключевые столбцы, если их нет в таблице?

Ответы [ 3 ]

0 голосов
/ 13 марта 2020

Пожалуйста, попробуйте следующий запрос

select stat.table_schema as database_name,
       stat.table_name,
       stat.index_name,
       group_concat(stat.column_name
            order by stat.seq_in_index separator ', ') as columns,
       tco.constraint_type
from information_schema.statistics stat
join information_schema.table_constraints tco
     on stat.table_schema = tco.table_schema
     and stat.table_name = tco.table_name
     and stat.index_name = tco.constraint_name
where stat.non_unique = 0
      and stat.table_schema not in ('information_schema', 'sys',
                                    'performance_schema', 'mysql')
      and (tco.constraint_type !='UNIQUE' OR tco.constraint_type !='PRIMARY KEY') //You can made changes here if needed
group by stat.table_schema,
         stat.table_name,
         stat.index_name,
         tco.constraint_type
order by stat.table_schema,
         stat.table_name;
0 голосов
/ 13 марта 2020

Вы можете попробовать что-то вроде этого

SELECT  schema_name(t.schema_id), t.name,  i.name 
FROM sys.indexes i
INNER JOIN sys.tables t ON t.object_id= i.object_id
WHERE i.type>0 and t.is_ms_shipped=0 and t.name<>'sysdiagrams'
and (is_unique_constraint=1)

Предоставлено: Эта ссылка

0 голосов
/ 13 марта 2020

Здесь вам нужно найти имя столбца, принадлежащее конкретной таблице:

SELECT c.name AS ColName, t.name AS TableName
FROM sys.columns c
    JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name LIKE '%write here column name%'; 
...