Technical Article

Index rename to standards

,

Run the script in Enterprise Manager query window with your database selected as the current database.

The result window will contain a set of SP_RENAME commands.

Check these and run them. They will rename your indexes to standardise the names.

According to pattern:
IX_<TableName>_<Col1>_<Col2>...
or
AK_<TableName>_<Col1>_<Col2>...
depending on whether the index is unique (AK) or normal (IX).
The script handles any number of columns in an index limited by the maximum size of a name.
-- Index rename
-- According to pattern:
-- IX_<TableName>_<Col1>_<Col2>...
-- or
-- AK_<TableName>_<Col1>_<Col2>...
SELECT
'EXEC sp_rename ''' + object_schema_name(I.object_id) +'.'+ object_name(I.object_id) +'.' + I.name + ''', ''' +
CASE WHEN I.is_unique=1 THEN 'AK_' ELSE 'IX_' END +  object_name(I.object_id) + '_'+ I.COLUMN_NAMES
+ ''', ''index'';'
FROM
(
SELECT I.object_id, I.index_id, I.name,I.is_primary_key, I.type, I.is_unique, LEFT(I.COLUMN_NAMES,LEN(I.COLUMN_NAMES)-1) AS COLUMN_NAMES
FROM (
SELECT I.object_id, I.index_id, I.name,I.is_primary_key, I.type, I.is_unique,
( SELECT C0.name +'_' AS [text()]
FROM sys.index_columns IC0
JOIN sys.columns C0 ON C0.object_id = IC0.object_id AND C0.column_id = IC0.column_id
WHERE IC0.index_id=I.index_id AND IC0.object_id = I.object_id
ORDER BY IC0.index_column_id
FOR XML PATH ('')
) AS COLUMN_NAMES
FROM sys.indexes I
WHERE I.is_primary_key<>1
AND objectproperty(I.object_id,'IsTable')=1
AND objectproperty(I.object_id,'IsMSShipped ')=0
AND I.type NOT IN (0,3) -- Exclude XML indexes and heaps
) I
) I
WHERE I.name <> CASE WHEN I.is_unique=1 THEN 'AK_' ELSE 'IX_' END +  object_name(I.object_id) + '_'+ I.COLUMN_NAMES
ORDER BY 1
GO

Rate

You rated this post out of 5. Change rating

Share

Share

Rate

You rated this post out of 5. Change rating