获取数据库中唯一约束和索引的列表

Gag*_*gan 6 sql sql-server sql-server-2008

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

SELECT * FROM sys.sysobjects WHERE type!='u' AND name LIKE <tablename> 
Run Code Online (Sandbox Code Playgroud)

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

Aar*_*and 8

由于唯一约束作为索引在封面下实现,因此您可以直接从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');
Run Code Online (Sandbox Code Playgroud)

要重复所有数据库(并且可能没有针对特定表的过滤器):

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;
Run Code Online (Sandbox Code Playgroud)