如何识别所有具有(或没有)唯一索引的表?

时间:2018-07-11 19:27:09

标签: sql-server

在SQL Server中识别具有唯一索引的所有表的最有效方法是什么?

此问题已在Oracle其他地方解决:https://stackoverflow.com/a/28740458/3112914

我的最终目标是识别无法使用SSDT数据比较工具比较的数据库中的表。为了使该工具起作用,“表必须具有相同的主键,唯一索引或唯一约束。”我可以使用100.0来识别具有主键或唯一约束的内容,例如

OBJECTPROPERTY

有一个IsIndexed属性,但这并不表示它是一个 unique 索引。 https://docs.microsoft.com/en-us/sql/t-sql/functions/objectproperty-transact-sql?view=sql-server-2017

1 个答案:

答案 0 :(得分:0)

如果要列出所有具有唯一索引的表,则可以加入sys.indexes并使用列is_unique进行过滤。

例如

-- list of tables that have a unique index
SELECT SCHEMA_NAME(schema_id) AS SchemaName,
    name AS TableName
FROM 
    sys.tables
WHERE EXISTS (SELECT *
    FROM sys.indexes i
    WHERE i.object_id = tables.object_id AND is_unique = 1)

如果您想扩展显示每个表以及一个指示其是否具有唯一索引的值(即扩展上面的起始位置),则可以将该EXISTS语句包装在{{ 1}}或IIF,如下所示:

CASE