Supponiamo che io sono uno SQL Server 2005 tabella, TableX, con 2 indici su di esso:
Modificare una chiave primaria da non cluster a cluster
PK_TableX = PRIMARY KEY non cluster FieldA
IX_TableX_FieldB = cluster FieldB
Desidero cambiare il PK in CLUSTERED e l'altro indice in NONCLUSTERED.
Devo supporre che il database sarà in uso nel momento in cui provo a cambiare gli indici, quindi la mia preoccupazione principale che voglio evitare è che in un certo punto del processo il vincolo PK non esisterà sul tavolo. Voglio essere protetto contro qualsiasi rischio di inserimento di chiavi duplicate.
Ad esempio, non posso semplicemente rilasciare la chiave primaria e ricrearla.
Questo processo deve essere eseguito tramite uno script SQL, non tramite SSMS.
Ho un approccio che penso funzionerà (lo posterò come una potenziale risposta), ma vorrei aprirlo nel caso mi manchi qualcosa o c'è un altro/modo migliore. Inoltre, può risultare utile per gli altri in futuro
Perché si desidera eseguire il cluster sulla chiave primaria? È un GUID o INT? La maggior parte dei tuoi querys include la corrispondenza con il PK? – awright18
@ awright18 - il PK in cluster offre prestazioni migliori, in realtà è una chiave primaria composta su 2 campi int che più spesso interrogati su – AdaTheDev