2010-10-19 13 views
5

Vorrei sapere se c'è un modo per aggiungere una colonna a una tabella di SQL Server dopo che è stata creata e in una posizione specifica ??Aggiungi colonna su SQL Server in un luogo specifico?

Grazie.

+2

Purtroppo no, puoi vedere come fa Management Studio aggiungendo la colonna e salvando una copia dello script di modifica. – Kane

+1

E non dovresti fare affidamento sull'ordine delle colonne nella tabella per il tuo output, ti stai impostando con codice fragile. Come indicato di seguito, specifica le colonne (e il loro ordine) nella tua selezione – BlackICE

risposta

1

con SQL Server Management Studio è possibile aprire la tabella in progettazione e trascinare la colonna dove vuoi

1

Come dice Kane, non è possibile in modo diretto. Puoi vedere come lo fa Management Studio aggiungendo una colonna in modalità progettazione e controllando lo script di modifica.

Se la colonna non si trova nell'ultima posizione, lo script in pratica elimina la tabella e la ricrea, con la nuova colonna nella posizione desiderata.

2

Il modo più sicuro per farlo è.

  • Creare la nuova tabella con l'ordine colonna corretta
  • Copiare i dati dal vecchio tavolo.
  • Lascia cadere il vecchio tavolo.
2

L'unico modo sicuro per farlo è creare una nuova tabella (con la colonna in cui si desidera), eseguire la migrazione dei dati, eliminare la tabella originale e rinominare la nuova tabella con il nome originale.

Questo è ciò che Management Studio fa per te quando inserisci colonne.

8

È possibile farlo in Management Studio. È possibile esaminare il modo in cui questo viene realizzato generando lo script SQL PRIMA di salvare le modifiche. In sostanza è raggiunto da:

  • eliminando tutte le chiavi esterne
  • la creazione di una nuova tabella con la colonna aggiunta
  • la copia di tutti i dati dal vecchio al nuovo tavolo
  • cadere il vecchio tavolo
  • ridenominazione la nuova tabella per il vecchio nome
  • ricreare tutte le chiavi esterne
0

No.

Fondamentalmente, SSMS dietro le quinte copierà la tabella, i vincoli, ecc, rilascia la vecchia tabella e rinomina il nuovo.

La ragione è semplice - le colonne non sono destinate ad essere ordinati (né sono le righe), in modo che stai sempre significato per elencare le colonne che si desidera in un set di risultati (select * è un po 'di un hack)

1

Nelle colonne della tabella dei database non è stato ordinato.

Scrivi corretta select e creare una vista

5

In aggiunta a tutte le altre risposte, ricordate che è possibile riordinare e rinominare le colonne nelle viste. Pertanto, se si ritiene necessario archiviare i dati in un formato ma presentarli in un altro, è sufficiente aggiungere la colonna alla fine della tabella e creare una vista tabella singola che riordina e rinomina le colonne che si desidera mostrare.In quasi tutte le circostanze, questa vista si comporterà esattamente come la tabella originale.

+0

+1 per una grande idea – Kane

+0

+1 Per il pensiero alternativo. –

+1

Se sei OCD abbastanza da volere uno specifico ordine di colonne, allora suppongo che apprezzerai gli oggetti extra da gestire ... – gbn

2

Come altri hanno sottolineato, è possibile farlo creando una tabella temporanea spostando i dati e rilasciando la tabella originale e quindi rinominando l'altra tabella. Questa è una cosa stupida da fare però. Se la tua tabella è grande, potrebbe essere molto dispendioso in termini di tempo per farlo e gli utenti saranno bloccati durante il processo. Questo è ciò che non vuoi MAI fare a nessun tavolo in produzione.

Non c'è assolutamente alcun motivo per preoccuparsi di quale ordine le colonne sono in una tabella poiché non si dovrebbe fare affidamento sull'ordine di colonne comunque (cosa succede se qualcun altro ha fatto la stessa cosa stupida?). Nessuna query dovrebbe utilizzare selezionare * o posizioni ordinali per ottenere colonne. Se lo stai facendo ora, questo è un codice non funzionante e deve essere risolto immediatamente poiché i risultati non saranno sempre come previsto. Ad esempio se si inserisce una colonna dove si desidera e qualcun altro sta usando select * per un report, all'improvviso il numero di parte viene visualizzato nel punto in cui si teneva il Price.

Facendo ciò che si vuole fare, si può rompere molto di più di quello che si fissa mettendo la colonna dove lo si vuole personalmente. L'ordine delle colonne nelle tabelle dovrebbe sempre essere irrilevante. Non dovresti farlo ogni volta che vuoi che le colonne appaiano in un ordine diverso.