Найти многоколонный первичный ключ

У меня есть около 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;
Другие вопросы по тегам