Fügen Sie eine neue Spalte hinzu und definieren Sie ihre Position in einer Tabelle

7

Ich habe Tabelle A mit 5 Spalten:

TableA
--
Name
Tel
Email
Address

Ich möchte eine neue Spalte (mobil) zwischen Tel & E-Mail hinzufügen:

TableA
--
Name
Tel
Mobile
Email
Address

Wenn ich benutze

ALTER TABLE TableA
ADD COLUMN Mobile INT NOT NULL

Die mobile Spalte wird am Ende der Tabelle hinzugefügt.

Gibt es eine Möglichkeit, dies zu erreichen, ohne die Tabelle zu löschen und Daten in eine neue Tabelle zu verschieben?

AmmarR
quelle
5
Die Reihenfolge der Spalten in einer relationalen Tabelle spielt keine Rolle. Warum brauchen Sie Ihrer Meinung nach eine bestimmte Position für diese Spalte? Sie können jederzeit die
gewünschte
2
Richtig, ich möchte nur, dass die Tabelle strukturiert und organisiert aussieht. Ich möchte, dass verwandte Spalten nahe beieinander liegen, so wie firstname,lastnameich nicht möchte, dass der Vorname am Anfang und der Nachname am Ende steht.
AmmarR
2
@AmmarR - FWIW Ich stimme Ihnen und Erlands Kommentar zum verknüpften Verbindungselement zu. Es ist viel schöner, beim Anzeigen der Tabelle im Designer verwandte Spalten zusammen zu haben, als um die Tabellendefinition herumzuspringen.
Martin Smith
Warum wir keine neue Spalte zwischen vorhandenen Spalten einer Tabelle einfügen können: connectsql.blogspot.com/2010/12/…
aasim.abdullah

Antworten:

17

Nein. Der Wiederaufbau der Tabelle ist der einzige Weg. Siehe dieses Verbindungselement zur Bestätigung .

Sie können SSMS verwenden, um dies für Sie zu skripten, wenn Sie dem etwas fehlerhaften Tabellen-Designer vertrauen.

Außerdem können Sie eine Ansicht mit der gewünschten Spaltenreihenfolge deklarieren, um logisch verwandte Spalten zu gruppieren.

Martin Smith
quelle
Traurige Wahrheit, denn diese Tabelle ist riesig, 30 Millionen Datensätze und wird häufig verwendet. Ich bin ein bisschen überrascht darüber. Ich meine, in SQL 2000 konnte ich den Tabellendesigner verwenden, um eine Spalte zwischen den Spalten hinzuzufügen, und der Designer ermöglicht das Speichern von Änderungen. In SQL 2008 erhalte ich jedoch immer die Meldung Saving changes is not permitted, the changes you have made require the table to be dropped and re-created, wie ich das Skript verwende Ich weiß nicht, warum Microsoft seine Meinung zu dieser Funktion geändert hat.
AmmarR
9
@AmmarR - Das einzig Neue ist, dass Sie jetzt eine Warnmeldung erhalten, bevor sie einfach fallen gelassen und die Tabelle still hinter den Kulissen neu erstellt wurde. 2000 hatte auch keine Syntax, um dies zu tun. Sie können die Option deaktivieren, um das Speichern von Änderungen zu verhindern, die die Tabelle löschen und neu erstellen würden, aber ich würde mich in dem oben beschriebenen Fall definitiv nicht darum kümmern, es sei denn, Sie können dies in einem Wartungsfenster tun. Sie sollten sich auch darüber im Klaren sein, dass der Designer einige Fehler hat (z. B. verliert er die FILESTREAMOn-Spalten, wenn er die Tabelle neu erstellt). Verwenden Sie diese also einfach, um die Änderung zu skripten und sie dann auf ihre Richtigkeit zu überprüfen.
Martin Smith
-8

Wenn Sie sehen, dass das Speichern von Änderungen nicht zulässig ist. Nach dem Hinzufügen einer neuen Spalte in Designer mit SQL Server 2005 oder höher müssen Sie Extras -> Optionen auswählen, Designer auswählen und das Kontrollkästchen unter Tabellenoptionen mit dem Namen "Speichern von Änderungen verhindern, die eine Neuerstellung der Tabelle erfordern" deaktivieren. Nachdem Sie diesen Schritt ausgeführt haben, sollten Sie in der Lage sein, Ihre Änderungen an der gewünschten Stelle zu speichern.

Es ist seltsam, dass Sie mit MySQL überall Spalten mit SQL hinzufügen können, aber mit SQL Server können Sie dies nur mit Designer tun. Hmmm. Es scheint, als müssten irgendwo versteckte magische Befehle sein! ;-);

John
quelle
1
Dies würde immer noch den Tisch fallen lassen.
Ypercubeᵀᴹ