2012-11-15 13 views
7

データ型uniqueIdentifierの列に構築されたすべてのクラスタードインデックスを検索しようとしています。明らかに、これはクラスタ化されたインデックスのためのひどい選択であり、私はそれらのすべてを見つけて削除しようとしています。これまでに書いたスクリプトは、uniqueIdentifierを持つすべてのテーブルのすべてのクラスタード・インデックスを返します。助けてください。ここでのスクリプトは次のとおりです。SQL Server - 特定のデータ型に基づいて構築されたすべてのクラスタードインデックスを検索するスクリプト

select distinct object_name(i.object_id) AS tablename, i.name AS indexname, i.type_desc  as type 
from sys.indexes i 
join sys.index_columns ic on ic.object_id = i.object_id and ic.index_id = i.index_id 
join sys.columns c on c.column_id = ic.index_column_id 
join sys.types t on t.system_type_id = c.system_type_id 
join sys.objects o on o.object_id = i.object_id 
where t.name = 'uniqueidentifier' 
and i.type_desc = 'clustered' 
and object_name(i.object_id) not like 'sys%' 
+0

あなたの行方不明のビットが**の値がランダムに割り当てられている場合には(**例えばひどい選択です – RichardTheKiwi

+0

をOBJECT_ID含めるべきでON句sys.columns、であるように見えます'newid()'を通して)。シーケンシャルな値が割り当てられているのであれば、必ずしもひどい選択ではありません。 –

答えて

8
select o.name objectname, i.name indexname, c.name as columnname 
from sys.objects o 
join sys.indexes i on i.object_id = o.object_id 
join sys.index_columns ic on ic.index_id = i.index_id and ic.object_id = i.object_id 
join sys.columns c on c.object_id = o.object_id and c.column_id = ic.column_id 
join sys.types t on c.system_type_id = t.system_type_id 
where o.is_ms_shipped = 0 
    and i.type_desc = 'CLUSTERED' 
    and t.name = 'uniqueidentifier' 
order by o.name, i.name 
+0

RichardTheKiwiありがとうございます。それは素晴らしく働いた:) – user1825469

+0

あなたは大歓迎です。その答を受け入れることを忘れないでください。 – RichardTheKiwi

関連する問題