Domanda

Se aggiungo una colonna a una tabella in Microsoft SQL Server, posso controllare dove la colonna viene visualizzata logicamente nelle query?

Non voglio interferire con il layout fisico delle colonne sul disco, ma vorrei raggruppare logicamente le colonne quando possibile in modo che strumenti come SQL Server Management Studio elenchino il contenuto della tabella in modo conveniente.

So che posso farlo tramite SQL Management Studio accedendo alla modalità "progettazione" per le tabelle e trascinando l'ordine delle colonne, ma mi piacerebbe poterlo fare in SQL non elaborato in modo da poter eseguire l'ordinamento scritto tramite script dalla riga di comando.

È stato utile?

Soluzione

Non è possibile farlo in modo programmatico (in modo sicuro cioè) senza creare una nuova tabella.

Ciò che fa Enterprise Manager quando si effettua un riordino è creare una nuova tabella, spostare i dati, quindi eliminare la vecchia tabella e rinominare la nuova tabella con il nome esistente.

Se desideri che le tue colonne siano in un ordine/raggruppamento particolare senza alterarne l'ordine fisico, puoi creare una vista che può essere qualunque cosa desideri.

Altri suggerimenti

Penso che ciò che manca a tutti qui è che, sebbene non tutti abbiano a che fare con 10, 20 o migliaia di istanze dello stesso sistema software installato in tutto il paese e nel mondo...quelli di noi che progettano software venduto commercialmente lo fanno.Di conseguenza, espandiamo i sistemi nel tempo, espandiamo le tabelle aggiungendo campi man mano che sono necessarie nuove funzionalità e, una volta identificati, tali campi appartengono a una tabella esistente e, come tale, oltre un decennio di espansione, crescita, aggiunta di campi, ecc. ai tavoli....e poi dover lavorare con quelle tabelle dalla progettazione, al supporto, a volte scavare nei dati grezzi/risoluzione dei problemi per eseguire il debug di nuovi bug di funzionalità....è incredibilmente irritante non avere le informazioni primarie che desideri vedere nella prima manciata di campi, quando potresti avere tabelle con 30-40-50 o anche 90 campi e sì in un database rigorosamente normalizzato.

Ho spesso desiderato poterlo fare, proprio per questo motivo.Ma a meno di fare esattamente quello che fa SQL, costruire uno script di creazione per una nuova tabella nel modo in cui lo voglio, scrivendovi l'Insert, quindi eliminando tutti i vincoli, le relazioni, le chiavi, l'indice, ecc. ecc. esistenti dalla tabella esistente e rinominandoli la "nuova" tabella riporta al vecchio nome, e poi leggendo tutte quelle chiavi, relazioni, indici, ecc ecc....

Non è solo noioso, richiede molto tempo, ma...tra altri cinque anni, dovrà succedere di nuovo....

È così vicino che vale un'enorme quantità di lavoro, tuttavia il punto è...non sarà l'ultima volta che avremo bisogno di questa capacità, poiché i nostri sistemi continueranno a crescere, espandersi e ottenere campi in un ordine stravagante guidato da necessità/aggiunte di progettazione.

La maggior parte degli sviluppatori pensa dal punto di vista di un unico sistema che serve una singola azienda o un mercato hard box molto specifico.

I designer e leader di sviluppo "pronti all'uso" ma significativamente progressisti nel loro spazio di mercato dovranno sempre affrontare questo problema, ancora e ancora... adorerebbero una soluzione creativa se qualcuno ne avesse una.Ciò potrebbe facilmente far risparmiare alla mia azienda una dozzina di ore a settimana, semplicemente senza dover scorrere o ricordare dove si trova "quel" campo nella tabella dei dati di origine....

Se ho capito la tua domanda, vuoi influenzare quali colonne vengono restituite per prima, seconda, terza, ecc esistente domande, vero?

Se tutte le tue domande sono scritte con SELECT * FROM TABLE - quindi verranno visualizzati nell'output così come sono disposti in SQL.

Se le tue domande sono scritte con SELECT Field1, Field2 FROM TABLE - quindi l'ordine in cui sono disposti in SQL non ha importanza.

Quando Management Studio lo fa, crea una tabella temporanea, copia tutto, elimina la tabella originale e rinomina la tabella temporanea.Non esiste una semplice istruzione T-SQL equivalente.

Se non ti va di farlo, puoi sempre creare una vista della tabella con le colonne nell'ordine che preferisci e usarla?

Modificare:battuto!

Esiste un modo, ma è solo temporaneamente per la query stessa.Per esempio,

Diciamo che hai 5 tavoli.La tabella viene chiamata T_Testing

Nome, Cognome, Numero di telefono, E-mail e ID_membro

vuoi che elenchi il loro ID, quindi il cognome, quindi il nome, quindi il telefono e infine l'e-mail.

Puoi farlo secondo Select.

Select Member_ID, LastName, FirstName, PhoneNumber, Email
From T_Testing

Oltre a ciò, se per qualche motivo vuoi semplicemente che il Cognome venga mostrato prima del nome, puoi farlo anche come segue:

Select LastName, *
From T_Testing

L'unica cosa che vuoi essere sicuro di fare è che la funzione OrderBy o Where deve essere indicata come Table.Column se intendi utilizzare Where o OrderBy

Esempio:

Select LastName, *
From T_Testing
Order By T_Testing.LastName Desc

Spero che questo aiuti, l'ho capito perché avevo bisogno di farlo da solo.

  1. Crea lo script della tabella esistente in una finestra di query.
  2. Esegui questo script su un database di test (rimuovi l'istruzione Use)
  3. Utilizza SSMS per apportare le modifiche alle colonne necessarie
  4. Fai clic su Genera Change Script (a sinistra più e icona Bottomost sulla barra dei pulsanti, per impostazione predefinita)
  5. Usa questo script contro il tuo tavolo reale

Tutto ciò che lo script fa realmente è creare una seconda tabella con gli ordini di colonna desiderati, copiarvi tutti i dati, eliminare la tabella originale e quindi rinominare la tabella secondaria per prendere il suo posto.Questo ti evita di scriverlo tu stesso se desideri uno script di distribuzione.

Può essere fatto utilizzando SQL, modificando direttamente le tabelle di sistema.Ad esempio, guarda qui:

Modifica tabella: aggiungi una nuova colonna in mezzo

Tuttavia, non consiglierei di giocare con le tabelle di sistema, a meno che non sia assolutamente necessario.

Non è possibile modificare l'ordine delle colonne senza ricreare l'intera tabella.Se disponi solo di alcune istanze del database, puoi utilizzare SSMS per questo (seleziona la tabella e fai clic su "progettazione").

Nel caso in cui tu abbia troppe istanze per un processo manuale, dovresti provare questo script:https://github.com/Epaminaidos/reorder-columns

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top