2012-08-13 69 views
2

我必须获取所有唯一键约束和特定数据库的索引的列表。我正在做这样的事情:获取数据库中唯一约束和索引的列表

SELECT * FROM sys.sysobjects WHERE type!='u' AND name LIKE <tablename> 

只是想确认这是否是正确的方法,或者是否有更好的方法来做同样的事情?

回答

5

由于唯一约束的封面作为指标下实现的,您可以直接从SYS.INDEXES获得所有这些信息:

SELECT 
    [schema] = OBJECT_SCHEMA_NAME([object_id]), 
    [table] = OBJECT_NAME([object_id]), 
    [index] = name, 
    is_unique_constraint, 
    is_unique, 
    is_primary_key 
FROM sys.indexes 
-- WHERE [object_id] = OBJECT_ID('dbo.tablename'); 

要重复所有数据库(想必没有特定表过滤器):

DECLARE @sql NVARCHAR(MAX) = N''; 

SELECT @sql += 'SELECT db = ' + name + ', 
    [schema] = OBJECT_SCHEMA_NAME([object_id]), 
    [table] = OBJECT_NAME([object_id]), 
    [index] = name, 
    is_unique_constraint, 
    is_unique, 
    is_primary_key 
    FROM ' + QUOTENAME(name) + '.sys.indexes;' 
FROM sys.databases 
WHERE database_id BETWEEN 4 AND 32766; 

EXEC sp_executesql @sql; 
+0

我希望我的编辑解决了困惑... :) – Gagan 2012-08-13 19:55:22

+0

@Nav我进一步澄清(针锋相对乐仍然听起来像你想结果跨数据库 - 我已经离开了我的答案,以防万一未来的读者)。 – 2012-08-13 20:03:45

+0

感谢您更新问题。非常感激。 – Gagan 2012-08-14 16:16:37

1

一个独特的约束是由类型sys.objects中表示“UQ”

select name from sys.objects where type='UQ' 

要获得指标

select i.name, o.name from sys.indexes i 
inner join sys.objects o on i.object_id= o.object_id 
0

你可以得到的唯一键约束和索引从SYS。索引。 具体来说,唯一约束:

select * from sys.indexes where is_unique_constraint = 1