如何从c#中的数据库中获取唯一列

时间:2015-03-26 20:43:24

标签: c# .net sql-server

我正在尝试使用c#获取SQL Server表中的所有唯一列。

对于前。我有一个名为“Emp”的表,其中包含以下列:

Id (PK), Name, Address, SSN (Unique)

如何检索C#中唯一的列?

1 个答案:

答案 0 :(得分:1)

喜欢这个。

WITH i_unique AS (
    SELECT i.object_id, i.index_id
    FROM sys.indexes AS i
        INNER JOIN sys.index_columns AS ic
            ON ic.object_id = i.object_id
                AND ic.index_id = i.index_id
    WHERE i.is_unique = 1/*true*/
    GROUP BY i.object_id, i.index_id
    HAVING COUNT(ic.column_id) = 1
)
SELECT
    c.name AS 'column_name',
    i.name AS 'index_name'
FROM sys.objects AS o   
    INNER JOIN sys.indexes AS i
        INNER JOIN i_unique
            ON i_unique.object_id = i.object_id
                AND i_unique.index_id = i.index_id
        INNER JOIN sys.index_columns AS ic
            INNER JOIN sys.columns AS c
                ON c.object_id = ic.object_id
                    AND c.column_id = ic.column_id
            ON ic.object_id = i.object_id
                AND ic.index_id = i.index_id
        ON i.object_id = o.object_id
WHERE o.object_id = OBJECT_ID('Emp');

<强>更新

请记住,当列唯一索引包含的列时,它会返回一列。因此,复合索引上的那些被排除在外(因为它们本身并不是唯一的)。