Найти многоколонный первичный ключ
У меня есть около 30 таблиц из старой ERP, которые имеют многоколонные первичные ключи. К сожалению, я не знаю, что это за ключи. Я использовал задачу профилирования служб SSIS, чтобы определить кандидатов первичного ключа для максимум 5 столбцов, но она выполняется настолько медленно, что нецелесообразно. Есть ли инструмент, который сделал бы это быстрее? Моя альтернатива - около 2 недель исследования с использованием Excel и множества отдельных запросов.
2 ответа
Как оказалось, мне удалось получить первичные ключи для многих таблиц путем обратной разработки с ER/Studio с использованием драйвера ODBC.
Я понятия не имею, как им удается получить первичные ключи (отчеты, созданные базой данных, не показывают их), но для большинства таблиц кажется, что они есть.
Следующее должно получить вам то, что вы ищете.
SELECT
*
FROM (
SELECT
i.object_id,
index_name = i.name,
key_column_name = c.name,
ic.key_ordinal,
key_col_cnt = MAX(ic.key_ordinal) OVER (PARTITION BY ic.object_id)
FROM
sys.indexes i
JOIN sys.index_columns ic
ON i.object_id = ic.object_id
AND i.index_id = ic.index_id
JOIN sys.columns c
ON ic.object_id = c.object_id
AND ic.column_id = c.column_id
WHERE
i.is_primary_key = 1
) ix
WHERE
ix.key_col_cnt > 1;