2012-03-28 16 views
2

coumn名でインデックスを取得し、私は以外の照合を持つすべての列を返す以下のクエリを持っている「順序SQL_Latin1_General_CP1_CI_AS」私はまた、インデックスを取得する必要があり私はSQL-Serverを使用してい

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS 
where COLLATION_NAME <> 'SQL_Latin1_General_CP1_CI_AS' 
and COLLATION_NAME is not null; 

これらの列を削除して、列を変更してから再作成することができます。

上記のクエリから返された列のインデックス名を取得する方法がわかりません。

+0

SQL Serverののバージョンは? – Bryan

+0

sql server 2008 –

答えて

2

は、以下を参照してください。

select object_schema_name(object_id), object_name(object_id), name 
from sys.indexes 
where type > 0 
and object_name(object_id) in (
    select C.column_name 
    from INFORMATION_SCHEMA.COLUMNS C 
    where COLLATION_NAME is not null and COLLATION_NAME <> 'SQL_Latin1_General_CP1_CI_AS' 
) 
+0

正常に動作しているようですが、条件タイプ> 0が何を意味するのか尋ねることはできますか? –

+1

は、インデックスがヒープであることを意味します(http://msdn.microsoft.com/en-us/library/ms173760.aspx)。 問題が解決した場合は、投票して回答としてマークしてください – Diego

0

はこれを試してみてください。これはあなたを助けている場合

select col.COLUMN_NAME,col.table_name,usg.CONSTRAINT_NAME as IndexName 
from INFORMATION_SCHEMA.COLUMNS col 
join INFORMATION_SCHEMA.KEY_COLUMN_USAGE usg 
    on usg.TABLE_NAME=col.TABLE_NAME and usg.COLUMN_NAME=col.COLUMN_NAME 
where col.COLLATION_NAME <> 'SQL_Latin1_General_CP1_CI_AS' 
and col.COLLATION_NAME is not null; 
+0

インデックス名ではなく制約名が返されますか? –

関連する問題