2013-04-03 10 views
25

Ho situazione in cui ho bisogno di cambiare l'ordine delle colonne/aggiunta di nuove colonne per tabella esistente in SQL Server 2008.Come cambiare l'ordine delle colonne di una tabella esistente in SQL Server 2008

colonna

esistente
MemberName 
MemberAddress 
Member_ID(pk) 

e voglio questo ordine

Member_ID(pk) 
MemberName 
MemberAddress 
+4

non c'è vero modo per cambiare l'ordine delle colonne - Anche se SSMS fingerà lì è crea effettivamente una nuova tabella, copia i dati, elimina l'originale e rinomina quello nuovo. Dovresti davvero imparare a convivere con il fatto che le colonne possono essere in qualsiasi ordine e che non c'è alcun significato intrinseco all'ordine. Sarai più produttivo a lungo termine. –

+10

Anche se molte persone sottolineano l'ordine delle colonne, non importa, penso che manchino all'immagine più grande. Noi come sviluppatori non possiamo essere gli unici a accedere al database. Analisti e simili spesso hanno bisogno di visualizzare i dati e l'ordine delle colonne può fare una grande differenza per loro.L'ordine delle colonne semplifica inoltre la visualizzazione dei dati gerarchici. – webworm

+1

Webworm concordato. ma oltre a questo, alcuni software non seguono le migliori pratiche. Ho un'applicazione che utilizza un database che viene unito al merge. l'applicazione ignorerà la colonna rowguid aggiunta a una tabella replicata fintanto che è l'ultimo campo nella tabella. Colonne aggiunte dopo la colonna rowguid non si comportano correttamente nell'applicazione. Cattiva programmazione? ovviamente. Ma non l'ho scritto e devo conviverci finché non è disponibile una soluzione. –

risposta

55

ho avuto la risposta per la stessa, Vai su sql server -->Tools-->Option--> designer-->Table and database Designers e unselect prevent saving changes that require table-re creation

enter image description here

2- Aprire la tabella vista di disegno e che scorrere la vostra colonna su e giù e salvare le modifiche.

enter image description here

+2

Voglio solo ricordare che lo script di SQL Server generato creerà la/e tabella/i temporanea, creerà il 'INSERT INTO' e lascerà cadere le tabelle temporanee. Quello che ti aspetti e non vuoi veramente scrivere manualmente. – Maxence

+1

Potrebbe anche essere necessario aumentare il timeout, se la tabella contiene dati. – DCShannon

+0

@Aman Ciò causerà la perdita di dati già presenti nella tabella? – f470071

5

Se la tabella non ha tutti i record si può solo cadere quindi creare la tabella.

Se dispone di record, è possibile farlo utilizzando SQL Server Management Studio.

Basta fare clic sulla tabella> fare clic con il pulsante destro del mouse> fare clic su Progettazione, quindi è possibile ordinare l'ordine delle colonne trascinando i campi nell'ordine desiderato, quindi fare clic su Salva.

migliori saluti

1

Basandosi su ordine delle colonne è generalmente una cattiva idea in SQL. SQL è basato sulla teoria relazionale in cui l'ordine non è mai garantito, in base alla progettazione. Si dovrebbe trattare tutte le colonne e righe come privo di ordine e quindi modificare le vostre domande a fornire i risultati corretti:

per le colonne:

  • Cercate di non usare SELECT *, ma invece specificare l'ordine di colonne nell'elenco di selezione come: SELECT Member_ID, MemberName, MemberAddress da TableName. Ciò garantirà l'ordine e faciliterà la manutenzione se le colonne verranno aggiunte.

per le righe:

  • ordine Row nel vostro set di risultati è garantita solo se si specifica la clausola ORDER BY.
  • Se non viene specificata alcuna clausola ORDER BY, il set di risultati può variare in quanto il piano di query potrebbe essere diverso o le pagine del database potrebbero essere cambiate.

Spero che questo aiuti ...

+0

y Sql Heroes funzionerà – Aman

+0

L'ordine delle righe potrebbe non avere importanza quando si esegue una query sul database, ma influisce sul modo in cui le colonne vengono visualizzate nella GUI SMS, che è l'unica ragione per cui sono qui. – DCShannon

+1

@DCShannon Come aggiornamento - e se ordinare le colonne è più importante, allora potresti esporre la tabella tramite una vista, usa SELECT Member_ID, MemberName, MemberAddress da TableName per definire la tua vista. Ovunque tu faccia riferimento al tuo tavolo puoi semplicemente fare riferimento alla tua vista. Quindi le colonne verranno ordinate tutte le volte che la vista specifica esplicitamente quell'ordine. – Charl

2

Ho provato questo e non vedo alcun modo di farlo.

ecco il mio approccio per questo.

  1. Fare clic destro sul tavolo e tavolo di script per creare e avere questo su uno della finestra di query SQL,
  2. EXEC sp_rename 'Employee', 'Employee1' - nome della tabella originale è Employee
  3. esegui il dipendente creare uno script, assicuratevi organizzare le colonne nel modo in cui è necessario.
  4. INSERT INTO TABLE2 SELECT * FROM TABLE1. - Inserisci nel Dipendente selezionare Nome, Azienda dal Dipendente1
  5. DROP table Employee1.
9

Non è possibile con l'istruzione ALTER.Se vuoi avere le colonne in un ordine specifico, devi creare una newtable, usa INSERT INTO newtable (col-x, col-a, col-b) SELECT col-x, col-a, col-b FROM oldtable per trasferire i dati da oldtable a newtable, eliminare oldtable e rinominare newtable con il nome oldtable.

Questo non è necessariamente raccomandato perché non importa quale ordine le colonne si trovano nella tabella del database. Quando si utilizza un'istruzione SELECT, è possibile assegnare un nome alle colonne e restituirle nell'ordine desiderato.

0

Questo può essere un problema quando si utilizza controllo del codice sorgente e automatizzato implementazioni ad un ambiente di sviluppo condiviso. Dove lavoro, abbiamo un DB di esempio molto ampio sul nostro livello di sviluppo con cui lavorare (un sottoinsieme dei nostri dati di produzione).

Recentemente ho fatto un po 'di lavoro per rimuovere una colonna da un tavolo e aggiungerne altre alla fine. Ho quindi dovuto annullare la rimozione della colonna, quindi l'ho riaggiunta alla fine, il che significa che la tabella e tutti i riferimenti sono corretti nell'ambiente, ma la distribuzione automatica del controllo del codice sorgente non funzionerà più perché si lamenta della modifica della definizione della tabella.

Il vero problema qui è che gli indici tabella + sono ~ 120GB e l'ambiente ha solo ~ 60GB libero in modo avrò bisogno di uno:

a) Rinominare le colonne esistenti, che sono nell'ordine sbagliato, aggiungere nuove colonne nel giusto ordine, aggiornano i dati poi cadere le vecchie colonne

O

b) rinominare la tabella, creare una nuova tabella con l'ordine corretto, inserire la nuova tabella dalla vecchia e cancellare dal vecchio mentre percorro

L'opzione Confronto schema SSMS/TFS dell'utilizzo di una tabella temporanea non funzionerà perché non c'è abbastanza spazio sul disco per farlo.

Non sto cercando di dire che questo è il modo migliore per fare le cose o che l'ordine delle colonne conta davvero, solo che ho uno scenario in cui è un problema e sto condividendo le opzioni che ho pensato di per risolvere il problema

-3

query SQL per modificare la colonna id nella prima:

ALTER TABLE `student` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT FIRST; 

o utilizzando:

ALTER TABLE `student` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT AFTER 'column_name' 
+0

In quale versione di SQL Server funziona? – nolaspeaker

+0

Nessuno. È per MySQL. – Gustav

Problemi correlati