查找多列主键

Find Multi-Column Primary key

我有大约 30 个来自旧 ERP 的表,这些表具有多列主键。不幸的是我不知道那些钥匙是什么。我已经使用 SSIS 分析任务来确定最多 5 列的主键候选者,但它运行得太慢以至于不切实际。有没有什么工具可以更快地做到这一点?我的替代方案是使用 Excel 和大量 select 不同的查询进行大约 2 周的调查。

以下内容应该可以满足您的需求。

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;

事实证明,通过使用 ODBC 驱动程序对 ER/Studio 进行逆向工程,我能够获得许多 table 的主键。

我不知道他们是如何设法获取主键的(数据库生成的报告不显示它们),但对于大多数 table 来说,它们似乎就在那里。