2012-03-28 12 views
2

ich SQLServer bin mit, und ich habe die folgende Abfrage, die alle Spalten zurückgibt, die eine Sortierung andere als ‚SQL_Latin1_General_CP1_CI_AS‘ hatErhalten Indizes von coumn Namen

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

ich auch die Indizes erhalten muß Mit diesen Spalten kann ich diese Indizes löschen, Spalten ändern und sie dann neu erstellen.

Mein Problem, dass ich nicht weiß, wie man die Indexnamen für die Spalten erhält, die von der obigen Abfrage zurückgegeben werden.

+0

Welche Version von SQL Server? – Bryan

+0

sql server 2008 –

Antwort

2

sehen, ob dies hilft Ihnen:

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

Es scheint, es funktioniert gut, aber kann ich dich fragen, wofür die Bedingung Typ> 0 steht? –

+1

bedeutet, dass der Index ein Heap ist (http://msdn.microsoft.com/en-us/library/ms173760.aspx). Wenn es Ihr Problem gelöst hat, stimmen Sie bitte ab und markieren Sie es als Antwort – Diego

0

Try this:

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

Gibt dies nicht den Constraint-Namen zurück, nicht den Indexnamen? –

Verwandte Themen