Kan ik logisch herschikken kolommen in een tabel?

stemmen
77

Als ik een column ben toe te voegen aan een tabel in Microsoft SQL Server, kan ik bepalen waar de kolom logisch wordt weergegeven in query's?

Ik wil niet te knoeien met de fysieke lay-out van de kolommen op de harde schijf, maar ik wil graag logische groepering kolommen bij elkaar als mogelijk, zodat tools zoals SQL Server Management Studio een lijst van de inhoud van de tabel in een handige manier.

Ik weet dat ik dit kan doen via SQL Management Studio door te gaan in hun ontwerp -modus voor tafels en de volgorde van de kolommen te slepen rond, maar ik zou graag in staat zijn om het te doen in ruwe SQL, zodat ik het bestelproces kan uitvoeren scripted vanaf de opdrachtregel.

De vraag is gesteld op 04/08/2008 om 22:37
bron van user
In andere talen...                            


8 antwoorden

stemmen
61

Je kunt dit programmatisch (op een veilige manier, dat is) niet zonder het maken van een nieuwe tabel.

Wat Enterprise Manager doet wanneer u het plegen van een herschikking is om een ​​nieuwe tabel te maken, verplaatst u de gegevens en vervolgens de oude tabel te verwijderen en de naam van de nieuwe tabel aan de bestaande naam.

Als u de kolommen in een bepaalde volgorde / groepering willen zonder dat hun fysieke volgorde, kunt u een standpunt dat kan zijn wat u wenst te creëren.

antwoordde op 04/08/2008 om 22:54
bron van user

stemmen
35

Ik denk dat wat iedereen hier ontbreekt, is dat hoewel niet iedereen heeft te maken met de 10's, 20's, of exemplaren van dezelfde software systeem in het hele land en de wereld geïnstalleerd 1000's ... degenen onder ons die het ontwerp in de handel verkrijgbare software te doen. Als gevolg daarvan, uit te breiden we systemen in de tijd, uit te breiden tabellen door het toevoegen van velden als nieuw vermogen nodig is, en als die velden zijn geïdentificeerd niet thuishoren in een bestaande tabel, en als zodanig, meer dan een decennium uit te breiden, groeien, het toevoegen van velden, etc tafels .... en dan te moeten werken met deze tabellen van ontwerp, te ondersteunen, soms graven in ruwe data / het oplossen van problemen om nieuwe functionaliteit bugs te debuggen .... het is ongelooflijk verzwarende om de primaire informatie die u wilt niet zien binnen de eerste handvol velden, wanneer u tabellen kunt hebben met 30-40-50 of zelfs 90 velden en ja in een strikt genormaliseerde database.

Ik heb vaak wou dat ik kon dit doen, want deze exacte reden. Maar kort te doen precies wat SQL doet, Building a Maak Script voor een nieuwe tabel van de manier waarop ik het wil, het schrijven van de Invoegen om het dan te laten vallen alle bestaande beperkingen, relaties, sleutels, index, etc etc etc uit de bestaande tafel en hernoemen de "nieuwe" table terug naar de oude naam, en vervolgens het lezen van al die sleutels, relaties, index, etc etc ....

Is niet alleen vervelend, tijdrovend, maar ... in vijf jaar, zal opnieuw moeten gebeuren ....

Het is zo dicht bij de moeite die enorme hoeveelheid werk, maar het punt is ... het zal niet de laatste keer dat we dit vermogen nodig zijn, omdat onze systemen zal blijven groeien, uit te breiden, en krijg velden in een Wacked bestelde gedreven door behoefte / design toevoegingen.

Een meerderheid van de ontwikkelaars denken vanuit één systeem standpunt dat een enkel bedrijf of zeer specifieke harde doos markt bedient.

De "off-the-shelf" maar aanzienlijk vooruitstrevende ontwerpers en leiders van de ontwikkeling in de markt ruimte zal altijd te maken met dit probleem, over en ..... zou graag een creatieve oplossing als iemand heeft er een. Dit kan gemakkelijk een tiental uur per week sparen mijn bedrijf, maar niet hoeft te boven te scrollen, of herinneren waar "dat" veld in de brongegevens tafel ....

antwoordde op 01/02/2013 om 01:10
bron van user

stemmen
5

Als ik begrijp uw vraag, wilt u invloed hebben op wat kolommen eerst worden geretourneerd, tweede, derde, etc in de bestaande query's, toch?

Als al uw vragen worden geschreven met SELECT * FROM TABLE- dan zullen ze verschijnen in de uitvoer als ze in SQL zijn vastgelegd.

Als uw vragen worden geschreven met SELECT Field1, Field2 FROM TABLE- dan is de volgorde waarin ze worden uitgevoerd in SQL aangelegd maakt niet uit.

antwoordde op 06/08/2008 om 16:42
bron van user

stemmen
1
  1. Script uw ​​bestaande tafel om een ​​query venster.
  2. Voer dit script tegen een Test-database (verwijder het gebruik statement)
  3. Gebruik SSMS om de kolom wijzigingen die u nodig hebt
  4. Klik Genereer Change Script (meest linkse en onderste pictogram op de knoppenbalk, standaard)
  5. Gebruik dit script tegen je echte tafel

Al het script echt doet is het creëren van een tweede tabel tafel met de gewenste kolom orders, kopieert al uw gegevens in, daalt de oorspronkelijke tabel en hernoemt dan de secundaire tafel om zijn plaats in te nemen. Dit betekent bespaart u aan het schrijven zelf al moet je een deploy script.

antwoordde op 08/03/2016 om 14:31
bron van user

stemmen
1

Er is een manier, maar het is slechts tijdelijk voor de query zelf. Bijvoorbeeld,

Laten we zeggen dat je 5 tafels. Table heetT_Testing

Voornaam, Achternaam, telefoonnummer, e-mail, en member_id

je wilt dat het lijst van hun ID, dan is Achternaam, dan Voornaam, dan Phone dan e-mail.

U kunt dit doen volgens de Select.

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

Anders dan dat, als je gewoon wilt de achternaam te tonen voor de eerste naam voor een of andere reden, je kunt het ook doen als volgt:

Select LastName, *
From T_Testing

Het enige wat je wilt er zeker van zijn dat je doet is dat de OrderBy of Waar functie moet worden aangeduid als Table.Column als je gaat worden met behulp van een Where or OrderBy

Voorbeeld:

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

Ik hoop dat dit helpt, ik dacht dat het uit, omdat ik die nodig zijn om dit zelf te doen.

antwoordde op 06/11/2014 om 18:08
bron van user

stemmen
1

Het kan worden gedaan met behulp van SQL, door het direct wijzigen van het systeem tabellen. Bijvoorbeeld, kijk hier:

Alter table - Voeg een nieuwe kolom in tussen

Toch zou ik niet aanraden het spelen met het systeem tafels, tenzij het absoluut noodzakelijk is.

antwoordde op 05/10/2008 om 21:34
bron van user

stemmen
1

Wanneer Management Studio doet, is het creëren van een tijdelijke tabel, over het kopiëren van alles, laten vallen van uw oorspronkelijke tabel en hernoemen van de tijdelijke tabel. Er is geen eenvoudige gelijkwaardige T-SQL-instructie.

Als je geen zin om dat te doen, kan je altijd zorgen voor een uitzicht op de tafel met de kolommen in de volgorde die u wilt en gebruik dat?

Edit: geslagen!

antwoordde op 04/08/2008 om 23:00
bron van user

stemmen
0

Het is niet mogelijk om de volgorde van de kolommen wijzigen zonder opnieuw de hele tafel. Als je een paar voorbeelden van alleen de database, kunt u SSMS gebruiken voor dit (Selecteer de tabel en klik op "ontwerp").

In het geval dat je te veel gevallen voor een handmatig proces, moet je proberen dit script: https://github.com/Epaminaidos/reorder-columns

antwoordde op 03/09/2016 om 10:56
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more