Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Obtenir la liste des contraintes uniques et des index dans une base de données

Étant donné que les contraintes uniques sont implémentées sous les couvertures sous forme d'index, vous pouvez obtenir toutes ces informations directement à partir de 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');

A répéter pour toutes les bases de données (et vraisemblablement sans le filtre pour une table spécifique) :

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;