2017-11-20 18 views
-3

sqlを使用してデータベース内のすべてのテーブルからすべてのユニークインデックスを取得するようにクエリします。出力には、スキーマ名、表名、列名が表示されます。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 

を彼らは1つの一意のインデックス列が複数ある場合にはTableNameIndexName複数回表示されます。

これは、表示したい:

TableName IndexName   ColumnName 
Customers IX_customer_name FirstName, LastName 

答えて

0

あなたがsp_MSforEachDBストアドプロシージャを使用することができます:あなたはまた、if db_id() > 4 begin endを追加することにより、システムデータベースを除外することができ

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