在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
答案 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