I have a table with a clustered index in two columns - the primary key for the table. It is defined as follows:
ALTER TABLE Table ADD CONSTRAINT [PK_Table] PRIMARY KEY CLUSTERED ( [ColA] ASC, [ColB] ASC )WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]
I want to remove this PK clustered index and add a clustered index, for example, as follows, and add a primary key constraint using the non-clustered index, also shown below.
CREATE CLUSTERED INDEX [IX_Clustered] ON [Table] ( [ColC] ASC, [ColA] ASC, [ColD] ASC, [ColE] ASC, [ColF] ASC, [ColG] ASC )WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, FILLFACTOR = 90, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = OFF) ON [PRIMARY] ALTER TABLE Table ADD CONSTRAINT PK_Table PRIMARY KEY NONCLUSTERED ( ColA, ColB ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
I was going to just delete the PK clustered index, then add a new clustered index and then add a non-clustered primary key index, but I found out that deleting the existing cluster index will reorder the table data (see answer here What happens when I drop the cluster primary key in SQL 2005 ), which I think is not needed. The table knocks down 1 TB, so I really want to avoid unnecessary reordering.
My question is, what is the best way to move from an existing structure to a desired structure?
EDIT: Just want to clarify. Table 1TB, and I, unfortunately, have no place to create a temporary table. If there is a way to do this without creating a temporary table, then please let me know.