Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Rufen Sie die Liste der eindeutigen Einschränkungen und Indizes in einer Datenbank ab

Da eindeutige Einschränkungen unter der Decke als Indizes implementiert sind, können Sie alle diese Informationen direkt aus sys.indexes abrufen:

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');

Um es für alle Datenbanken zu wiederholen (und vermutlich ohne den Filter für eine bestimmte Tabelle):

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;