2012-11-15 3 views
7

Ich versuche alle Clustered-Indizes zu finden, die auf Spalten des Datentyps uniqueIdentifier aufbauen. Offensichtlich ist dies eine schreckliche Wahl für einen gruppierten Index, und ich versuche, alle von ihnen zu finden und sie zu entfernen. Das Skript, das ich bisher geschrieben habe, gibt alle gruppierten Indizes für jede Tabelle zurück, für die ein uniqueIdentifier vorhanden ist. Bitte helfen Sie. Hier ist das Skript:SQL Server - Skript, um alle Clustered-Indizes zu finden, die auf einem bestimmten Datentyp basieren

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

Es ist wie Ihre fehlende Bit aussieht, ist die sys.columns ON-Klausel, die – RichardTheKiwi

+0

object_id umfassen sollte Es ist eine schreckliche Wahl ** ** wenn die Werte zufällig zugewiesen werden (zB durch 'newid()'). Es ist nicht notwendigerweise eine schreckliche Wahl, wenn sequentielle Werte zugewiesen werden. –

Antwort

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

Danke RichardTheKiwi. Das hat wunderbar funktioniert :) – user1825469

+0

Gern geschehen. Bitte denken Sie daran, die Antwort durch Ankreuzen zu akzeptieren. – RichardTheKiwi

Verwandte Themen