【问题标题】:Query to pull all unique indexes from all tables in database using sql查询以使用 sql 从数据库中的所有表中提取所有唯一索引
【发布时间】:2017-11-20 16:35:27
【问题描述】:

查询以使用 sql 从数据库中的所有表中提取所有唯一索引。输出应显示架构名称、表名称和列名称。

我尝试了以下查询:

SELECT
     t.[name] AS TableName
    ,i.[name] AS IndexName
    ,c.[name] AS ColumnName
FROM sys.schemas s
INNER JOIN sys.tables t ON t.schema_id = s.schema_id
    AND s.[name] = 'dbo'
INNER JOIN sys.columns c ON c.object_id = t.object_id
INNER JOIN sys.indexes i ON i.object_id = t.object_id
    AND i.index_id > 0
    AND i.is_primary_key = 0
    AND i.is_unique = 1
INNER JOIN sys.index_columns ic ON ic.object_id = t.object_id
    AND ic.column_id = c.column_id

但如果 TableNameIndexName 有多个唯一索引列,则它们会显示多次。

它要显示:

TableName   IndexName           ColumnName
Customers   IX_customer_name    FirstName, LastName

【问题讨论】:

    标签: sql sql-server tsql unique-index


    【解决方案1】:

    您可以使用sp_MSforEachDB 存储过程:

    EXECUTE master.sys.sp_MSforeachdb '
    USE [?];
    select db_name(), *
    from sys.indexes
    where is_unique = 1';
    

    您也可以通过添加if db_id() > 4 begin end来排除系统数据库。

    【讨论】:

      猜你喜欢
      • 2014-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多