wake-up-neo.net

SQL Server Management Studio - Hinzufügen/Verschieben von Spalten erforderlich, löschen und neu erstellen?

Warum erhalte ich die Meldung, dass die Tabelle gelöscht und neu erstellt werden muss, wenn ich Spalten hinzufüge/verschiebe? Ich glaube, dies geschieht nach dem Hinzufügen von Fremdschlüsseleinschränkungen.

Was kann ich tun, um neue Spalten hinzuzufügen, ohne die Tabelle zu löschen?

17
tvr

"Prevent saving changes that require table re-creation"

Wenn Sie mehr Interesse daran haben, dass SSMS nicht mehr mit dem Nörgeln aufhört, können Sie die Option "Speichern von Änderungen verhindern, für die eine erneute Erstellung von Tabellen erforderlich ist" unter Optionen-> Designer-> Tabellen- und Datenbank-Designer deaktivieren. Die Tabelle (n) wird immer noch gelöscht und neu erstellt, aber zumindest belästigt Sie SSMS nicht so sehr. 

(Dies setzt voraus, dass Sie in einer Entwicklungs-/Testumgebung oder in einer Produktionsumgebung arbeiten, in der ein kurzes Versagen der Existenz der Tabelle nichts vermasselt.)

24
John Rose

Weil SQL Server Management Studio dies (manchmal) so macht!

Verwenden Sie stattdessen TSQLs ALTER TABLE :

ALTER TABLE
    ADD myCol int NOT NULL
8
Mitch Wheat

SQL Server (und wirklich jedes andere RDBMS) hat überhaupt keine Ahnung von "Spaltenreihenfolge" - z. Wenn Sie Spalten verschieben, können Sie die neue Tabellenstruktur nur durch eine neue CREATE TABLE-Anweisung erreichen. Sie können Ihre Spalten nicht auf andere Weise bestellen - und sollten Sie auch nicht, denn in der relationalen Theorie ist die Reihenfolge der Spalten in einem Tuple irrelevant.

Das einzige, was SQL Server Management Studio kann (und hat es schon immer getan), ist:

  • benennen Sie die alte Tabelle um
  • erstellen Sie die neue Tabelle in Ihrem neuen Layout, das Sie haben möchten
  • kopieren Sie die Daten aus der alten Tabelle
  • lass den alten Tisch fallen

Der einzige Weg, dies zu umgehen, ist:

  • spalten nicht neu anordnen - Fügen Sie nur neue Spalten am Ende Ihrer Tabelle hinzu
  • verwenden Sie ALTER TABLE SQL-Anweisungen anstelle des interaktiven Tabellen-Designers für Ihre Arbeit
1
marc_s

Wenn Sie eine Tabellendefinition im Designer bearbeiten, sagen Sie: "Ich möchte, dass die Tabelle so aussieht. Nun müssen Sie herausfinden, welche SQL-Anweisungen ausgegeben werden sollen, damit meine Wünsche in Erfüllung gehen". Dies funktioniert gut für einfache Änderungen, aber die Software kann Ihre Gedanken nicht lesen, und manchmal wird sie aus Sicherheitsgründen etwas komplizierter machen.

Wenn dies der Fall ist, schlage ich vor, anstatt auf OK zu klicken, auf die Schaltfläche "Skript" oben im Dialogfeld zu klicken und die SQL-Anweisungen in einem Abfragefenster generieren zu lassen. Sie können den generierten Code dann vor der Ausführung bearbeiten und vereinfachen.

0

In SSMS 2008 R2 (und älter) gibt es Fehler, die hilfreich sind: 

  • wenn die Tabellendaten geändert werden, wird das Rendern in SSMS in den bereits geöffneten Registerkarten (Fenstern) von SSMS automatisch wiederhergestellt. Zum Aktualisieren sollte Strg + R gedrückt werden. Die Optionen zum Erzwingen der Aktualisierung werden in der SSMS-Benutzeroberfläche nicht angezeigt - über Schaltflächen, Menüs oder kontextabhängige Optionen (beim Klicken mit der rechten Maustaste). 
  • wenn ein (Tabellen- oder Datenbank-) Schema geändert wird, z. B. das Hinzufügen/Löschen/Entfernen einer Spalte in einer Tabelle, spiegelt SSMS diese Änderungen in bereits geöffneten Registerkarten (Fenstern) nicht wider, auch nicht durch Strg + R. Man sollte Registerkarten schließen und erneut öffnen ) 

Ich habe es vor einigen Jahren durch Feedback von Microsoft Connect gemeldet, aber Fehler wurden geschlossen, da es "von Design" ist. 

Aktualisieren:
Dies ist merkwürdig und irritierend in Desktop-Produkten zu sehen, die in zwei Jahrzehnten entwickelt wurden, während dies bei den meisten Webanwendungen in jedem Browser (Autorefreshing) erfolgt