Wie ändere ich die Spaltenreihenfolge in einer Tabelle mithilfe der SQL-Abfrage in SQL Server 2005?
Ich möchte die Spaltenreihenfolge in einer Tabelle mithilfe der SQL-Abfrage neu anordnen.
sql
sql-server-2005
Himadri
quelle
quelle
Antworten:
Du kannst nicht. Die Spaltenreihenfolge ist nur eine "kosmetische" Sache, die uns Menschen wichtig ist - für SQL Server ist sie fast immer absolut irrelevant.
Was SQL Server Management Studio im Hintergrund tut, wenn Sie die Spaltenreihenfolge ändern, besteht darin, die Tabelle mit einem neuen
CREATE TABLE
Befehl von Grund auf neu zu erstellen, die Daten aus der alten Tabelle zu kopieren und sie dann zu löschen.Es gibt keinen SQL-Befehl zum Definieren der Spaltenreihenfolge.
quelle
INSERT
ohne Ihre Spalten explizit anzugeben!Sie müssen die Felder explizit in der Reihenfolge auflisten, in der sie zurückgegeben werden sollen, anstatt * für die 'Standard'-Reihenfolge zu verwenden.
ursprüngliche Abfrage:
kehrt zurück
schreibe jetzt
quelle
gemäß http://msdn.microsoft.com/en-us/library/aa337556.aspx
Nun, es kann mit
create
/ copy /drop
/ rename gemacht werden , wie von komma8.komma1 beantwortetOder Sie können SQL Server Management Studio verwenden
Klicken Sie dann auf Speichern. Diese Methode löscht die Tabelle tatsächlich und erstellt sie neu, sodass einige Fehler auftreten können.
Wenn die Option Änderungsverfolgung für die Datenbank und die Tabelle aktiviert ist, sollten Sie diese Methode nicht verwenden.
Wenn diese Option deaktiviert ist, sollte die Option Änderungen am Speichern verhindern, für die die Tabelle neu erstellt werden muss, im Menü Extras> Optionen> Designer deaktiviert werden. Andernfalls tritt der Fehler "Speichern von Änderungen ist nicht zulässig" auf.
Probleme können auch bei der Erstellung von Primär- und Fremdschlüsseln auftreten.
Wenn einer der oben genannten Fehler auftritt, schlägt das Speichern fehl, sodass Sie die ursprüngliche Spaltenreihenfolge beibehalten.
quelle
This task cannot be performed using Transact-SQL statements.
" im Dokument war falsch. Ich erklärte den Autor und bat ihn, es in "This task is not supported using Transact-SQL statements.
" zu ändern . Vor ungefähr einem Tag stimmte der Autor zu und das Dokument wurde repariert. Sie können die Diskussion auf GitHub verfolgen .Dies ähnelt der Frage zum Bestellen der Datensätze im Ergebnis einer Abfrage. Normalerweise mag niemand die formal korrekte Antwort ;-)
Also los geht's:
select *
erzwingt a nicht, dass die Spalten in einer bestimmten Reihenfolge zurückgegeben werdencreate table' or in the
Anweisungen "alter table add")quelle
Sie können natürlich die Reihenfolge der Spalten in einer SQL-Anweisung ändern. Wenn Sie jedoch die physische Spaltenreihenfolge von Tabellen abstrahieren möchten, können Sie eine Ansicht erstellen. dh
quelle
In SQLServer Management Studio:
Extras -> Optionen -> Designer -> Tabellen- und Datenbankdesigner
Dann:
SQLServer Management Studio löscht die Tabelle und erstellt sie anhand der Daten neu.
quelle
Sie können dies tun, indem Sie eine neue Tabelle erstellen, alle Daten kopieren, die alte Tabelle löschen und dann die neue umbenennen, um die alte zu ersetzen.
Sie können der Tabelle auch neue Spalten hinzufügen, die spaltenweisen Daten kopieren, die alten Spalten löschen und dann neue Spalten umbenennen, um sie an die alten anzupassen. Ein einfaches Beispiel unten: http://sqlfiddle.com/#!3/67af4/1
quelle
In SQLServer Management Studio:
Tools
->Options
->Designers
->Table and Database Designers
Auswahl aufheben
Prevent saving changes that require table re-creation
.Jetzt können Sie die Tabelle neu anordnen.
quelle
SQL Server erstellt das Skript intern. Es erstellt eine temporäre Tabelle mit neuen Änderungen, kopiert die Daten und löscht die aktuelle Tabelle. Anschließend wird die Tabelleneinfügung aus der temporären Tabelle neu erstellt. Ich finde es aus der Option "Änderungsskript generieren" ssms 2014. Skript wie dieses. Von hier aus: So ändern Sie die Spaltenreihenfolge in einer Tabelle mithilfe der SQL-Abfrage
quelle
Wenn Ihre Tabelle genügend Spalten enthält, können Sie dies versuchen. Erstellen Sie zunächst eine neue Tabelle mit der bevorzugten Reihenfolge der Spalten.
Löschen Sie nun die Tabelle mit dem Befehl drop
Benennen Sie nun die neu erstellte Tabelle in Ihren alten Tabellennamen um.
Wählen Sie nun die Tabelle aus, und Sie haben Ihre Spalten nach Ihren Wünschen neu angeordnet.
quelle
Letztendlich können Sie dies in MS SQL einfach nicht tun. Ich habe kürzlich Tabellen unterwegs (Anwendungsstart) mit einer gespeicherten Prozedur erstellt, die aus einer Nachschlagetabelle liest. Als ich eine Ansicht erstellte, die diese mit einer anderen Tabelle kombinierte, die ich zuvor manuell erstellt hatte (dasselbe Schema mit Daten), schlug dies fehl - einfach, weil ich '' Select * UNION Select * '' für die Ansicht verwendete. Wenn ich nur diejenigen verwende, die über die gespeicherte Prozedur erstellt wurden, bin ich gleichzeitig erfolgreich.
Fazit: Wenn es eine Anwendung gibt, die von der Reihenfolge der Spalten abhängt, ist dies wirklich keine gute Programmierung und wird mit Sicherheit in Zukunft Probleme verursachen. Spalten sollten sich frei fühlen, überall zu sein und für jeden Datenprozess (INSERT, UPDATE, SELECT) verwendet zu werden.
quelle
Sie können dies mit folgenden Schritten erreichen:
Entfernen Sie alle Fremdschlüssel und Primärschlüssel der Originaltabelle.
Benennen Sie die ursprüngliche Tabelle um.
Erstellen Sie mit CTAS die Originaltabelle in der gewünschten Reihenfolge.
Lass den alten Tisch fallen.
Wenden Sie alle Einschränkungen wieder auf die ursprüngliche Tabelle an
quelle
Wenn die neu zu ordnenden Spalten kürzlich erstellt wurden und leer sind, können die Spalten gelöscht und in der richtigen Reihenfolge wieder hinzugefügt werden.
Dies geschah mir, als ich eine Datenbank manuell erweiterte, um neue Funktionen hinzuzufügen, und ich hatte eine Spalte verpasst, und als ich sie hinzufügte, war die Reihenfolge falsch.
Nachdem ich hier keine adäquate Lösung gefunden hatte, korrigierte ich die Tabelle einfach mit den folgenden Befehlen.
Hinweis: Tun Sie dies nur, wenn Sie keine Daten in den Spalten haben, die Sie löschen.
Die Leute haben gesagt, dass die Spaltenreihenfolge keine Rolle spielt. Ich verwende regelmäßig SQL Server Management Studio "Skripte generieren", um eine Textversion des Schemas einer Datenbank zu erstellen. Um die Versionskontrolle dieser Skripte (git) effektiv durchzuführen und sie zu vergleichen (WinMerge), ist es unbedingt erforderlich, dass die Ausgabe kompatibler Datenbanken gleich ist und die hervorgehobenen Unterschiede echte Datenbankunterschiede sind.
Die Spaltenreihenfolge spielt eine Rolle. aber nur für einige Leute, nicht für alle!
quelle
Ich nehme an, Sie möchten an einer bestimmten Position eine neue Spalte hinzufügen. Sie können eine neue Spalte erstellen, indem Sie die aktuellen Spalten nach rechts verschieben.
Entfernen Sie alle betroffenen Indizes und Fremdschlüsselreferenzen. Fügen Sie eine neue Spalte mit genau demselben Datentyp wie die letzte Spalte hinzu und kopieren Sie die Daten dort.
Ändern Sie den Datentyp der dritten Spalte in den gleichen Typ wie in der vorherigen Spalte und kopieren Sie die Daten dort.
Benennen Sie die Spalten entsprechend um, erstellen Sie entfernte Indizes und Fremdschlüsselreferenzen neu.
Ändern Sie den Datentyp der zweiten Spalte.
Denken Sie daran, dass die Spaltenreihenfolge nur eine "kosmetische" Sache ist, wie marc_s sagte .
quelle
Verwenden
Hier wird die Standardspaltenreihenfolge der Tabelle angezeigt.
Wenn Sie die Reihenfolge der Spalten ändern möchten.
Geben Sie den Spaltennamen an, der entsprechend angezeigt werden soll
quelle
Sie können die Indizierung verwenden. Wenn Sie nach der Indizierung * aus XXXX auswählen, sollten die Ergebnisse dem Index entsprechen, aber nur die Ergebnismenge. Nicht die Struktur der Tabelle
quelle
Sie können dies mithilfe der SQL-Abfrage ändern. Hier ist eine SQL-Abfrage, um die Reihenfolge der Spalten zu ändern.
quelle
Um eine bestimmte Spaltenreihenfolge zu haben, müssen Sie Spalte für Spalte in der gewünschten Reihenfolge auswählen. Die Auswahlreihenfolge bestimmt, wie die Spalten in der Ausgabe sortiert werden.
quelle
Versuchen Sie diesen Befehl:
Dadurch wird die Altersposition auf die erste Position geändert.
quelle
Tabellenname ändern Spaltenname ändern int (5) zuerst; bringt die Spalte zum ersten Ändern des Tabellennamens Ändern des Spaltennamens int (5) nach (Tabellenname);
quelle
Beispiel: Ändern Sie die Position von field_priority nach field_price im Tabellenstatus.
quelle