sql server - Kann ich Spalten in einer Tabelle logisch neu anordnen?

Translate

Kann ich steuern, wo die Spalte in Abfragen logisch angezeigt wird, wenn ich einer Tabelle in Microsoft SQL Server eine Spalte hinzufüge?

Ich möchte mich nicht mit dem physischen Layout von Spalten auf der Festplatte herumschlagen, aber ich möchte Spalten nach Möglichkeit logisch gruppieren, damit Tools wie SQL Server Management Studio den Inhalt der Tabelle auf bequeme Weise auflisten.

Ich weiß, dass ich dies über SQL Management Studio tun kann, indem ich in den "Entwurfs" -Modus für Tabellen gehe und die Reihenfolge der Spalten ziehe, aber ich möchte dies in Raw-SQL tun können, damit ich die Reihenfolge ausführen kann Skript über die Befehlszeile.

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Sie können dies nicht programmgesteuert (also auf sichere Weise) tun, ohne eine neue Tabelle zu erstellen.

Wenn Sie eine Neuordnung festlegen, erstellt Enterprise Manager eine neue Tabelle, verschiebt die Daten, löscht die alte Tabelle und benennt die neue Tabelle in den vorhandenen Namen um.

Wenn Sie Ihre Spalten in einer bestimmten Reihenfolge / Gruppierung haben möchten, ohne ihre physische Reihenfolge zu ändern, können Sie eine Ansicht erstellen, die beliebig sein kann.

Quelle
Translate

Ich denke, was jeder hier vermisst, ist, dass, obwohl nicht jeder mit 10er, 20er oder 1000er Instanzen desselben Softwaresystems zu tun hat, das im ganzen Land und auf der ganzen Welt installiert ist ... diejenigen von uns, die kommerziell verkaufte Software entwickeln, tun dies. Infolgedessen erweitern wir Systeme im Laufe der Zeit, erweitern Tabellen durch Hinzufügen von Feldern, wenn neue Funktionen erforderlich sind, und wenn diese Felder identifiziert werden, gehören sie zu einer vorhandenen Tabelle, und als solche über ein Jahrzehnt des Erweiterns, Wachsens, Hinzufügens von Feldern usw. zu Tabellen ... und dann mit diesen Tabellen arbeiten zu müssen, vom Entwurf über die Unterstützung bis hin zum Durchsuchen von Rohdaten / Fehlerbehebung, um neue Funktionsfehler zu beheben ... es ist unglaublich erschwerend, nicht die primären Informationen zu haben, die Sie möchten Sehen Sie in der ersten Handvoll Felder, wann Sie möglicherweise Tabellen mit 30-40-50 oder sogar 90 Feldern und ja in einer streng normalisierten Datenbank haben.

Ich habe mir oft gewünscht, ich könnte das aus genau diesem Grund tun. Aber ohne genau das zu tun, was SQL tut, ein Erstellungsskript für eine neue Tabelle so zu erstellen, wie ich es möchte, die Einfügung darauf zu schreiben, dann alle vorhandenen Einschränkungen, Beziehungen, Schlüssel, Indizes usw. usw. usw. aus der vorhandenen Tabelle zu entfernen und umzubenennen die "neue" Tabelle zurück zum alten Namen, und dann alle diese Schlüssel, Beziehungen, Index, etc etc lesen ....

Ist nicht nur langweilig, zeitaufwändig, sondern ... muss in fünf weiteren Jahren wieder passieren ....

Es ist so nah dran, diese enorme Menge an Arbeit wert zu sein, aber der Punkt ist ... es wird nicht das letzte Mal sein, dass wir diese Fähigkeit brauchen, da unsere Systeme weiter wachsen, expandieren und Felder in einer verrückten Reihenfolge erhalten werden, die von angetrieben wird Bedarfs- / Design-Ergänzungen.

Die Mehrheit der Entwickler denkt von einem einzigen Systemstandpunkt aus, der einem einzelnen Unternehmen oder einem ganz bestimmten Hardbox-Markt dient.

Die "handelsüblichen", aber deutlich fortschrittlichen Designer und Entwicklungsleiter in ihrem Markt werden sich immer und immer wieder mit diesem Problem befassen müssen ... würden eine kreative Lösung lieben, wenn jemand eine hat. Dies könnte meinem Unternehmen leicht ein Dutzend Stunden pro Woche ersparen, da ich nicht darüber scrollen oder mich daran erinnern muss, wo sich "dieses" Feld in der Quelldatentabelle befindet.

Quelle
Translate

Wenn ich Ihre Frage verstehe, möchten Sie beeinflussen, in welchen Spalten zuerst, zweitens, drittens usw. zurückgegeben werdenbestehenderFragen, richtig?

Wenn alle Ihre Abfragen mit geschrieben sindSELECT * FROM TABLE- Dann werden sie in der Ausgabe angezeigt, wenn sie in SQL angelegt sind.

Wenn Ihre Anfragen mit geschrieben sindSELECT Field1, Field2 FROM TABLE- Dann spielt die Reihenfolge, in der sie in SQL angeordnet sind, keine Rolle.

Quelle
Translate

Wenn Management Studio dies tut, wird eine temporäre Tabelle erstellt, alles kopiert, die ursprüngliche Tabelle gelöscht und die temporäre Tabelle umbenannt. Es gibt keine einfache äquivalente T-SQL-Anweisung.

Wenn Sie dies nicht möchten, können Sie jederzeit eine Ansicht der Tabelle mit den Spalten in der gewünschten Reihenfolge erstellen und diese verwenden.

Edit: geschlagen!

Quelle
Translate

Es gibt einen Weg, der jedoch nur vorübergehend für die Abfrage selbst gilt. Zum Beispiel,

Nehmen wir an, Sie haben 5 Tische. Tabelle heißtT_Testing

Vorname, Nachname, Telefonnummer, E-Mail und Mitgliedsnummer

Sie möchten, dass die ID aufgelistet wird, dann Nachname, dann Vorname, dann Telefon und dann E-Mail.

Sie können dies gemäß Auswahl tun.

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

Wenn Sie aus irgendeinem Grund nur möchten, dass der Nachname vor dem Vornamen angezeigt wird, können Sie dies auch wie folgt tun:

Select LastName, *
From T_Testing

Das einzige, was Sie sicher sein möchten, ist, dass die OrderBy- oder Where-Funktion als Table.Column bezeichnet werden muss, wenn Sie ein Where oder OrderBy verwenden möchten

Beispiel:

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

Ich hoffe das hilft, ich habe es herausgefunden, weil ich das selbst machen musste.

Quelle
Translate
  1. Schreiben Sie Ihre vorhandene Tabelle in ein Abfragefenster.
  2. Führen Sie dieses Skript für eine Testdatenbank aus (entfernen Sie die Use-Anweisung).
  3. Verwenden Sie SSMS, um die erforderlichen Spaltenänderungen vorzunehmen
  4. Klicken Sie auf Änderungsskript generieren (standardmäßig das Symbol ganz links und ganz unten in der Schaltflächenleiste).
  5. Verwenden Sie dieses Skript für Ihre reale Tabelle

Alles, was das Skript wirklich tut, ist, eine zweite Tabellentabelle mit den gewünschten Spaltenreihenfolgen zu erstellen, alle Ihre Daten darin zu kopieren, die ursprüngliche Tabelle zu löschen und dann die sekundäre Tabelle umzubenennen, um ihren Platz einzunehmen. Dies erspart Ihnen jedoch das Schreiben selbst, falls Sie ein Bereitstellungsskript benötigen.

Quelle
Translate

Dies kann mithilfe von SQL erfolgen, indem die Systemtabellen direkt geändert werden. Schauen Sie zum Beispiel hier:

Tabelle ändern - Fügen Sie dazwischen eine neue Spalte hinzu

Ich würde jedoch nicht empfehlen, mit Systemtischen zu spielen, es sei denn, dies ist absolut notwendig.

Quelle
Translate

Es ist nicht möglich, die Reihenfolge der Spalten zu ändern, ohne die gesamte Tabelle neu zu erstellen. Wenn Sie nur wenige Instanzen der Datenbank haben, können Sie hierfür SSMS verwenden (Wählen Sie die Tabelle aus und klicken Sie auf "Design").

Wenn Sie zu viele Instanzen für einen manuellen Prozess haben, sollten Sie dieses Skript ausprobieren:https://github.com/Epaminaidos/reorder-columns

Quelle