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.
sql-server
Fastcall
quelle
quelle
Antworten:
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
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 siehe in der ersten Handvoll Felder,
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 auf den alten Namen zurück und dann alle diese Schlüssel, Beziehungen, Index usw. usw. 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
FieldID Guid
,OrderBy int
. Getan. Dann SSMS oderSELECT *
nutzt das. Schalten Sie es aus, wenn Sie ein perfekter DBA sind und es nicht wollen. Sehr frustrierend. Und jetzt sind meine Tische groß genug, dass ich es nicht mehr brutal erzwingen kann.Wenn ich Ihre Frage verstehe, möchten Sie beeinflussen, welche Spalten in vorhandenen Abfragen zuerst, zweitens, drittens usw. zurückgegeben werden, oder?
Wenn alle Ihre Abfragen mit geschrieben wurden
SELECT * FROM TABLE
, werden sie in der Ausgabe angezeigt, wie sie in SQL angelegt sind.Wenn Ihre Abfragen mit geschrieben werden, spielt
SELECT Field1, Field2 FROM TABLE
die Reihenfolge, in der sie in SQL angeordnet sind, keine Rolle.quelle
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 das 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
Es gibt einen Weg, der jedoch nur vorübergehend für die Abfrage selbst gilt. Beispielsweise,
Nehmen wir an, Sie haben 5 Tische. Tabelle heißt
T_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.
Wenn Sie aus irgendeinem Grund nur möchten, dass der Nachname vor dem Vornamen angezeigt wird, können Sie dies auch wie folgt tun:
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:
Ich hoffe das hilft, ich habe es herausgefunden, weil ich das selbst machen musste.
quelle
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
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
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