Skip to content

SQL Server Error Messages - Msg 1902

Error Message

Server: Msg 1902, Level 16, State 3, Line 1
Cannot create more than one clustered index on table 'Table Name'.
Drop the existing clustered index 'Clustered Index Name' before creating another.

Causes:

As the message suggests, you can only have one clustered index on a table. A clustered index determines the physical order of data in a table. A clustered index is analogous to a telephone directory, which arranges data by last name. Because the clustered index dictates the physical storage order of the data in the table, a table can contain only one clustered index.

As an example similar to a telephone directory, let’s say you have the following table definition:

CREATE TABLE [dbo].[Directory] (
    [LastName]    VARCHAR(50) NOT NULL,
    [FirstName]   VARCHAR(50) NOT NULL,
    [AreaCode]    CHAR(3),
    [PhoneNumber] CHAR(7)
)
GO

ALTER TABLE [dbo].[Directory]
ADD CONSTRAINT PK_Directory PRIMARY KEY ( [LastName], [FirstName] )
GO

This creates a PRIMARY KEY constraint on the LastName and FirstName columns, which by default is CLUSTERED. Creating another clustered index on the AreaCode and PhoneNumber generates the error:

CREATE CLUSTERED INDEX [IX_Directory_AreaCode_PhoneNumber]
ON [dbo].[Directory] ( [AreaCode], [PhoneNumber] )
GO
Server: Msg 1902, Level 16, State 3, Line 1
Cannot create more than one clustered index on table 'Directory'.
Drop the existing clustered index 'PK_Directory' before creating another.

Solution / Work Around:

Since a table can only have one clustered index, you have to create any additional indexes on the table as non-clustered.

CREATE NONCLUSTERED INDEX [IX_Directory_AreaCode_PhoneNumber]
ON [dbo].[Directory] ( [AreaCode], [PhoneNumber] )
GO

If you want to change how the table is clustered, you have to drop the existing clustered index first before you can create a new one.

ALTER TABLE [dbo].[Directory]
DROP CONSTRAINT [PK_Directory]
GO

CREATE CLUSTERED INDEX [IX_Directory_AreaCode_PhoneNumber]
ON [dbo].[Directory] ( [AreaCode], [PhoneNumber] )
GO

ALTER TABLE [dbo].[Directory]
ADD CONSTRAINT [PK_Directory] PRIMARY KEY ( [LastName], [FirstName] )
GO

Since the [dbo].[Directory] already have a clustered index, the PRIMARY KEY constraint defaults to NONCLUSTERED.