查找多列主键

时间:2018-11-21 15:58:45

标签: sql-server ssis data-profiling

我有一个旧ERP的大约30张桌子,这些桌子有多列主键。不幸的是,我不知道这些键是什么。我已经使用SSIS分析任务来确定最多5列的主键候选对象,但是它运行得如此之慢以至于不切实际。有没有什么工具可以更快地做到这一点?我的替代方法是使用Excel进行大约2周的调查,并选择许多不同的查询。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

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

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