2009-06-23 14 views
5

Il mio database ha una tabella con migliaia di record. La chiave primaria è un numero intero. Esistono molti vincoli di chiave esterna associati a questa colonna.SQLSERVER: Come modificare una chiave primaria int della tabella esistente per diventare una colonna Identity?

Voglio cambiare questa colonna per diventare una chiave di identità. Qual è il modo migliore per farlo? Devo anche inviare questo aggiornamento alle installazioni dei nostri clienti.

punti di bonus per una risposta che funziona in SQL Server 2000.

risposta

11

C'è una grande funzionalità in SQL Server Management Studio che mi ha salvato la giornata.

In SSMS andare su Opzioni -> Designer -> Tabella e progettisti di database, selezionare "Genera automaticamente script di modifica" e deselezionare "Impedisci il salvataggio delle modifiche che richiedono la ricreazione della tabella".

In Esplora oggetti, passare alla tabella e selezionare la colonna che otterrà la specifica Identità. Fare clic con il tasto destro e selezionare Modifica. Nel pannello delle proprietà della colonna, espandere la struttura "Identity Specification" e modificare "(Is Identity)" su yes. Ora nella parte in alto a sinistra, seleziona l'icona "Genera script". Prestare attenzione ai messaggi di avviso.

Ora si avrà uno script generato che eliminerà tutti i vincoli, ricrea la tabella con identità e ricrea i vincoli. WOW!

Lo testerò e posterò qui i miei risultati.

Aggiornamento: Tutto ha funzionato bene. Ho dimenticato di dire nella domanda che ho bisogno dello script per riprodurre la modifica nelle installazioni dei nostri client.

Questo sito è davvero fantastico. Il tempo che ho speso per scrivere la mia risposta ho avuto altri 3!

+0

non credi che il mio suggerimento sia stato più semplice? :) – Stuart

+0

@STuart: È la stessa soluzione, ma neves salva prima il suo script. – gbn

+0

@Neves: Enterprise Manager ha lo stesso segno di "modifica e salvataggio" – gbn

1

In Enterprise Manager, fare clic destro la tabella in visualizzazione Tabella, selezionare il design.

fare clic sul lato sinistro della colonna (quindi, fare doppio clic l'identità, in colonne sotto, in proprietà delle colonne, lo accende, il default è di incremento automatico 1

0

Se la colonna è un intero come parte di relazioni esistenti quindi è già univoco, quindi non è necessario preoccuparsi dei duplicati! Questo è un enorme problema evitato già.

È possibile emettere un comando ALTER TABLE per modificare la colonna oppure è possibile farlo con Enterprise Manager.

1

Non esiste un singolo DDL "ALTER TABLE" per modificare un c esistente olumn a una colonna di identità. È possibile aggiungere una nuova colonna Identity solo a una tabella esistente.

Questo può essere fatto in Enterprise Manager ma è necessario essere consapevoli del fatto che il server Sql sta creando una nuova tabella e copiando i dati in background. Potresti avere alcuni problemi con questo. Ecco un articolo che spiega un po 'di più http://www.mssqltips.com/tip.asp?tip=1397

Nel tuo scenario penso che avrai bisogno di una combinazione di questo script e qualcosa per disabilitare e riabilitare i tuoi fk.