Vă mulțumim pentru susținere

Pot reordona în mod logic coloanele dintr-un tabel?

Dacă adaug o coloană într-o tabelă în Microsoft SQL Server, pot controla în cazul în care coloana este afișată logic în interogări?

Nu vreau să mă dezamăgesc cu aspectul fizic al coloanelor pe disc, dar aș vrea să colocalizez logic coloanele atunci când este posibil, astfel încât unelte precum SQL Server Management Studio să conțină conținutul tabelului într-un mod convenabil.

Știu că pot face acest lucru prin intermediul SQL Management Studio, mergând în modul lor de "design" pentru tabele și trăgând ordinea coloanelor în jur, dar aș vrea să pot face acest lucru în SQL brut pentru a putea efectua ordonarea scripted din linia de comandă.

0
adăugat editat
adăugat autor Tim Abell
adăugat autor Tim Abell
și o altă întrebare în legătură cu aceasta, dacă este importantă implicarea spațiului de performanță atunci când comandați stackoverflow.com/questions/6692021/…
adăugat autor Tim Abell
microsoft connect: ALTER TABLE sintaxa pentru schimbarea ordinii coloanei - răspunsul este de ciocolată - varietatea de untdelemn ca de obicei WONTFIX
adăugat autor Tim Abell
Prea târziu pentru un răspuns, dar aruncați o privire la acest link. blog.sqlauthority.com/2013/03/11/…
adăugat autor sqluser

8 răspunsuri

Când Managerul de Studio o face, creează o masă temporară, copiază totul, despică masa originală și redenumind masa temporară. Nu există nicio instrucțiune T-SQL echivalentă.

Dacă nu vă place să faceți acest lucru, puteți întotdeauna să creați o vizualizare a tabelului cu coloanele în ordinea dorită și să o utilizați?

Editați: bătut!

0
adăugat

Nu puteți face acest lucru programatic (într-un mod sigur), fără a crea o tabelă nouă.

Ce se face Enterprise Manager când faceți o reordonare este crearea unei tabele noi, mutarea datelor și apoi ștergerea vechii tabele și redenumirea tabelului nou pe numele existent.

Dacă doriți coloanele dvs. într-o anumită ordine / grupare, fără a modifica ordinea lor fizică, puteți crea o vizualizare care poate fi orice doriți.

0
adăugat

Dacă îți înțeleg întrebarea, vrei să afectezi coloanele care sunt returnate primul, al doilea, al treilea, etc în interogările existente , nu?

Dacă toate interogările dvs. sunt scrise cu SELECT * FROM TABLE - atunci acestea vor apărea în ieșire așa cum sunt acestea prezentate în SQL.

Dacă interogările dvs. sunt scrise cu SELECT Câmp1, Câmp2 FROM TABLE - atunci ordinea în care sunt expuse în SQL nu contează.

0
adăugat

Nu este posibil să schimbați ordinea coloanelor fără a crea o întreagă tabelă. Dacă aveți doar câteva instanțe ale bazei de date, puteți utiliza SSMS pentru aceasta (selectați tabelul și faceți clic pe "design").

In case you have too many instances for a manual process, you should try this script: https://github.com/Epaminaidos/reorder-columns

0
adăugat

Se poate face folosind SQL, prin modificarea directă a tabelelor de sistem. De exemplu, uitați-vă aici:

Modificați tabelul - adăugați o nouă coloană

Cu toate acestea, nu aș recomanda să jucați cu mesele de sistem, decât dacă este absolut necesar.

0
adăugat

Cred că ceea ce lipsește toată lumea este că, deși nu toată lumea are de a face cu 10, 20 sau 1000 de cazuri ale aceluiași sistem software instalat în întreaga țară și lume ... aceia dintre noi care proiectează software comercializat comercial fac acest lucru. În consecință, extindem sistemele în timp, extindem tabelele adăugând câmpuri deoarece este necesară o nouă capacitate și întrucât acele domenii sunt identificate aparțin într-un tabel existent și, ca atare, peste un deceniu de câmpuri de extindere, creștere, adăugare etc. la tabele .... și apoi nevoia de a lucra cu acele tabele de la design, pentru a sprijini, uneori săpe în date brute / depanare pentru a depana bug-uri noi de funcționalitate .... este incredibil de agravant să nu ai informațiile primare pe care vrei să le vedeți în prima parte a câmpurilor, când puteți avea tabele cu 30-40-50 sau chiar 90 de câmpuri și da într-o bază de date strict normalizată.

De multe ori am dorit să pot face acest lucru, din acest motiv exact. Dar nu este suficient să faci exact ceea ce face SQL, să creezi un script Script pentru o table nouă așa cum o vreau, să scriu insertul, apoi să renunțe la toate constrângerile existente, relații, chei, index, etc etc. din tabelul existent și redenumirea tabelul "nou" înapoi la vechiul nume, și apoi citirea tuturor acelor chei, relații, index, etc etc ....

Nu este doar plictisitor, consumatoare de timp, dar ... în următorii cinci ani, va trebui să se întâmple din nou ....

Este atât de aproape de a merita acea cantitate masivă de muncă, totuși punctul este ... nu va fi ultima oară când avem nevoie de această abilitate, deoarece sistemele noastre vor continua să crească, să se extindă și să obțină câmpuri într- nevoie / design add-uri.

Majoritatea dezvoltatorilor cred că dintr-un singur punct de sistem, care servește o singură companie sau o piață foarte specifică a casetelor.

Designerii "off-the-shelf", dar proiectanții progresivi semnificativi și liderii de dezvoltare în spațiul lor de piață vor trebui întotdeauna să se ocupe de această problemă, de peste și peste ..... ar dori o soluție creativă dacă cineva are unul. Acest lucru ar putea salva cu ușurință compania mea o duzină de ore pe săptămână, pur și simplu nu trebuie să defilați peste, sau amintesc unde "că" câmp este în tabelul de date sursă ....

0
adăugat
Am avut aceeași problemă și am creat o procedură stocată care automatizează acest proces (redenumiți, creați tabele noi, copiați, recreați toate cheile străine, constrângeri etc.). Trebuie doar să treceți în numele tabelului și în noua ordine a coloanelor. Dacă acest lucru ar putea salva efectiv compania dvs. zeci de ore pe săptămână, ar trebui să investească timpul de a scrie un script similar. Pentru noi, a durat doar 2-3 zile pentru a avea un script stabil pe care îl folosim în mod obișnuit pentru a reordona coloanele. Se ocupă de toate funcțiile pe care le folosim în SqlServer (de ex. Inde
adăugat autor Andreas

Există o singură cale, dar este doar temporar pentru interogarea însăși. De exemplu,

Lets say you have 5 tables. Table is called T_Testing

FirstName, LastName, Numar de Telefon, Email si Id_Numar

doriți să se afișeze ID-ul acestora, apoi numele de familie, apoi numele, apoi telefonul și apoi adresa de e-mail.

Puteți face acest lucru ca pe Select.

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

În afară de asta, dacă vrei doar să afișezi numele înainte de primul nume dintr-un anumit motiv, poți să o faci și după cum urmează:

Select LastName, *
From T_Testing

Singurul lucru pe care vreți să fiți sigur că îl faceți este că Ordinul OrderBy sau În cazul în care funcția trebuie să fie desemnate ca Table.Column dacă doriți să utilizați un Unde sau OrderBy

Exemplu:

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

Sper că acest lucru vă ajută, mi-am dat seama că trebuie să fac asta singură.

0
adăugat
În această interogare Selectați LastName, * De la T_Testing, obțineți LastName de două ori.
adăugat autor sqluser
  1. Scrieți tabelul existent într-o fereastră de interogare.
  2. Rulați acest script într-o bază de date de testare (eliminați instrucțiunea Utilizare)
  3. Utilizați SSMS pentru a efectua modificările de coloană de care aveți nevoie
  4. Faceți clic pe Generare schimbare script (iconița stânga cea mai de jos și cea mai de jos din bara de butoane, implicit)
  5. Utilizați acest script împotriva mesei tale reale

Tot scriptul face cu adevărat să creeze un al doilea tabel de tabel cu comenzile coloanei dorite, să copieze toate datele în el, să lase tabela originală și apoi să redenumească tabelul secundar pentru ao înlocui. Acest lucru vă salvează scrierea de tine, deși ar trebui să doriți un script de implementare.

0
adăugat