2009-09-02 13 views
5

Volevo modificare una colonna in una tabella di SQL Server 2005 su IDENTITY (1,1)
Incidentalmente questa tabella è vuota e la colonna essere cambiato è una chiave primaria.
Questa colonna è anche una chiave esterna per altre due tabelle.
sql server helper stored procedure o utilità per alter table alter table IDENTITY (1,1)

Dopo aver cercato su google ho scoperto che non è possibile utilizzare la sintassi della tabella di modifica per modificare una colonna e renderla una colonna di indentità.
link # 1: How do I add the identity property to an existing column in SQL Server
link # 2: Adding an identity to an existing column -SQL Server

Ho finito per controllare le tabelle dipendenti (di cui 2) rimuovere le chiavi esterne (generate lo script da SSMS) poi cadere la tabella principale poi ri -creare con identità. (potrebbe provare anche l'opzione di ridenominazione)
Quindi ricreare le chiavi esterne per le prime due tabelle dipendenti.

Ma tutto questo è stato un lavoro manuale, qualsiasi script o SP là fuori per rendere più facile questo.

Idealmente tutti questi passaggi sarà fatta per un tale script/strumento/utilità:

  1. Controlla tabelle dipendenti chiavi
  2. generare creare e rilasciare gli script di chiave esterna per questo
  3. generare creare script per la tabella principale
  4. rilasciare la tabella principale (o rinominare la tabella se la tabella contiene dati)
  5. ricreare la tabella con colonna di identità abilitato
  6. ricreare le chiavi esterne

risposta

4

È possibile utilizzare SSMS per generare uno script (modificare una tabella, Salva script), ma per il resto si tratta di un processo manuale come hai identificato.

Gli script SSMS raccolgono le dipendenze ecc. Per questo tipo di lavoro, tendo a utilizzare SSMS per generare uno script di base, papparlo un po ', eseguirlo con attenzione, quindi utilizzare uno strumento di confronto (ad esempio Red Gate confrontare) per generare una versione più sicura.

Edit: The SSMS error is not an error, it's a safety check that can be switched off

+0

+1, ci sono così tante cose da cambiare con tabelle/colonne/chiavi/vincoli/ecc. sarebbe impossibile avere un'utilità per ciascuno. ecco perché è possibile utilizzare la GUI per generare uno script. –

+1

SSMS genera un errore, questa è stata la prima opzione che ho provato. Dovrei aver menzionato nella domanda ... –

+0

Grazie per il link, disabilitando l'opzione ha funzionato come un fascino. –

2

(. Si tratta semplicemente di un follow-up al post di gbn con più dettagli - non è poi così facile da capire questa roba) (

Non è impossibile scrivere un programma di utilità per fare questo, solo molto complessa e molto difficile Fortunatamente, Microsoft ha già fatto - la sua chiamata SSMS (o SMO?) per generare un tale script:.

  • nell'oggetto. Explorer, drill down al database e alla tabella che si desidera modificare Fare clic con il tasto destro e selezionare Design

  • Apportare le modifiche desiderate a una tabella nella schermata di progettazione. È ragionevolmente intuitivo.

  • Per aggiungere/rimuovere la proprietà identity, selezionare la colonna nel riquadro superiore e, nel riquadro inferiore/scheda "Proprietà colonna", espandere e configurare le impostazioni in "Identity Specification".

  • Per generare uno script per implementare tutte le modifiche, incorporando tutte le modifiche chiave dipendenti, fare clic sul pulsante "Genera script modifica". Questa è anche un'opzione nel menu "Designer tabelle".

Ho anche fare questo per generare script (che poi modifico -. SSMS non sempre produce il codice più efficiente) Una volta fatto, è possibile uscire senza salvare le modifiche - lasciando un DB puoi testare il tuo nuovo script.

+0

Grazie, non sapevo se dovessi andare dettagli ... – gbn

+0

Mi sono imbattuto per caso in questa funzionalità solo molto tempo fa. All'inizio, la generazione e la revisione di questi script mi ​​hanno insegnato molto su SQL; in seguito mi ha portato a molti modi su come non scrivere SQL. (Immagino che il codice generato da SSMS sia - deve essere - compatibile con SQL fino alla 7.0 e forse prima?) –

+0

Già provato, questa è stata la prima cosa che ho provato. Viene visualizzato un messaggio di errore "Salvataggio delle modifiche non consentito, Le modifiche apportate richiedono la seguente tabella da eliminare ....... richiedere la creazione della tabella" –

0
  1. goccia il pk e costruire lo stesso tipo di dati della colonna
  2. copiare i dati della colonna che si desidera impostare identità alla nuova colonna.
  3. cadere la vecchia colonna
  4. ripristino chiave primaria

ALTER TABLE UserRole GOCCIA VINCOLO PK_XX ALTER TABLE XX

ADD newX int identità non nullo (1,1) chiave primaria

aggiornamento XX set newX = oldX

alter table XX DROP COLUM N oldX

Questo è il modo più semplice per impostare la colonna Identity. se non si desidera utilizzare lo script generato a lungo.

Problemi correlati