フィルタリングされたインデックスやインクルードされた列などは定義の一部ではないため、特にインデックスの場合はINFORMATION_SCHEMA.COLUMNS
から離れてください。私はここで、より詳細に本について話:
The case against INFORMATION_SCHEMA views
あなたはこのためにsys.indexes
とsys.index_columns
を使用します。たとえば、次のように
DECLARE @tablename NVARCHAR(512) = 'dbo.tbl_ClientDN';
SELECT
[Index] = i.name,
[Column] = c.Name,
[Type] = i.type_desc,
PK = i.is_primary_key,
[Unique] = i.is_unique,
[Unique Constraint] = i.is_unique_constraint,
[DESC] = ic.is_descending_key,
[INCLUDE] = ic.is_included_column,
[Filtered] = i.filter_definition -- only for SQL Server 2008+
FROM
sys.indexes AS i
INNER JOIN
sys.index_columns AS ic
ON i.[object_id] = ic.[object_id]
AND i.index_id = ic.index_id
INNER JOIN
sys.columns c
ON ic.column_id = c.column_id
AND ic.[object_id] = c.[object_id]
WHERE
i.[object_id] = OBJECT_ID(@tablename)
ORDER BY [Index], ic.index_column_id;
あなたが一度にすべてのテーブルのためにこれをしたい場合は、簡単な変更:
SELECT
[Table] = QUOTENAME(OBJECT_SCHEMA_NAME(i.[object_id]))
+ '.' + QUOTENAME(OBJECT_NAME(i.[object_id])),
[Index] = i.name,
[Column] = c.Name,
[Type] = i.type_desc,
PK = i.is_primary_key,
[Unique] = i.is_unique,
[Unique Constraint] = i.is_unique_constraint,
[DESC] = ic.is_descending_key,
[INCLUDE] = ic.is_included_column,
[Filtered] = i.filter_definition -- only for SQL Server 2008+
FROM
sys.indexes AS i
INNER JOIN
sys.index_columns AS ic
ON i.[object_id] = ic.[object_id]
AND i.index_id = ic.index_id
INNER JOIN
sys.columns c
ON ic.column_id = c.column_id
AND ic.[object_id] = c.[object_id]
ORDER BY [Table], [Index], ic.index_column_id;
は、あなたが使用しているSQL Serverのバージョンを指定するので、ここにいるしませんでしたsys.indexes
とsys.index_columns
に関するトピックへのリンクのすべて:
sys.indexes
SQLのSe RVER 2005 http://technet.microsoft.com/en-us/library/ms173760%28SQL.90%29.aspx
SQL Server 2008のhttp://technet.microsoft.com/en-us/library/ms173760%28SQL.100%29.aspx
のSQL Server 2008 R2 http://technet.microsoft.com/en-us/library/ms173760%28SQL.105%29.aspx
SQL Server 2012のhttp://technet.microsoft.com/en-us/library/ms173760%28SQL.110%29.aspx
sys.index_columns
SQL Server 2005のhttp://technet.microsoft.com/en-us/library/ms175105%28SQL.90%29.aspx
SQL Server 2008のhttp://technet.microsoft.com/en-us/library/ms175105%28SQL.100%29.aspx
SQL Server 2008のR2 http://technet.microsoft.com/en-us/library/ms175105%28SQL.105%29.aspx
S QL Server 2012 http://technet.microsoft.com/en-us/library/ms175105%28SQL.110%29.aspx
Kimberley L. Trippさんのsp_helpindex2をご覧ください。一般的に
EDIT
私は、@ BrianWhiteさんのコメントに同意します。これに何か努力を費やしているのであれば、ホイールを再発明して自分で書き込もうとする代わりに、このためのツールを使用しているはずです。この1つのクエリのトラブルシューティングは、おそらくすでに時間の点で、優れたツールのコストを費やしています。この記事をお読みください:
http://bertrandaaron.wordpress.com/2012/04/20/re-blog-the-cost-of-reinventing-the-wheel/
はレッドゲートSQLは、MySQLの作業を比較していますか?これは、テーブルスキーマを比較するために使用するツールです。 –
+1 @ BrianWhiteさんのコメント。 http://bertrandaaron.wordpress.com/2012/04/20/re-blog-the-cost-of-reinventing-the-wheel/ –