Speichern von Änderungen nach der Tabellenbearbeitung in SQL Server Management Studio

265

Wenn ich Änderungen in einer zuvor in SQL Server Management Studio gespeicherten Tabelle speichern möchte (keine Daten in der Tabelle vorhanden), wird folgende Fehlermeldung angezeigt:

Das Speichern von Änderungen ist nicht gestattet. Für die von Ihnen vorgenommenen Änderungen müssen die folgenden Tabellen gelöscht und neu erstellt werden. Sie haben entweder Änderungen an einer Tabelle vorgenommen, die nicht neu erstellt werden kann, oder die Option Speichern von Änderungen verhindern, bei denen die Tabelle neu erstellt werden muss.

Was kann verhindern, dass die Tabelle leicht bearbeitet werden kann? Oder ist es für SQL Server Management Studio die übliche Methode, eine Tabelle zum Bearbeiten neu zu erstellen? Was ist das - diese "Option Speichern von Änderungen verhindern" ?

rem
quelle
4
Ein mögliches Duplikat des Speicherns von Änderungen ist in SQL Server
Pang
1
@Pang - Diese Frage kam zuerst, dies ist das Duplikat.
GrandMasterFlush
@Pang - das wusste ich nicht, danke.
GrandMasterFlush

Antworten:

573

Gehen Sie zu Extras -> Optionen -> Designer-> Deaktivieren Sie "Speichern von Änderungen verhindern, die eine Neuerstellung der Tabelle erfordern". Voila.

Das passiert, weil es manchmal notwendig ist, eine Tabelle zu löschen und neu zu erstellen, um etwas zu ändern. Dies kann eine Weile dauern, da alle Daten in eine temporäre Tabelle kopiert und dann erneut in die neue Tabelle eingefügt werden müssen. Da SQL Server Ihnen standardmäßig nicht vertraut, müssen Sie sagen: "OK, ich weiß, was ich tue. Lassen Sie mich jetzt meine Arbeit erledigen."

Pedro
quelle
8
Die Microsoft Support-Website rät davon ab, aber wenn Sie keine Daten in der Tabelle haben, sehe ich keinen Schaden. Wahrscheinlich am besten TSQL verwenden, um die Änderungen vorzunehmen.
Jon Smock
6
Ich persönlich würde davon abraten, den Designer für wichtige Datenbanken zu verwenden. Ich habe bei vielen Gelegenheiten gesehen, dass es kostspielige Fehler macht. Außerdem fördert es faule Entwicklungsgewohnheiten und ermöglicht es Benutzern, die Datenbankstruktur zu ändern, die möglicherweise nicht in der Lage sind, dies zu tun, wenn sie die SQL-Code-Route nicht verwalten können.
Mark W Dickson
5
Einverstanden, Mark, aber in der frühen Entwicklung muss ich keinen Stapel Skripte schreiben.
Kristopher
7
Es ist schockierend, dass es September 2016 ist und dieser unglaubliche benutzerunfreundliche Fehler (ohne die Option "Hey, möchten Sie Tischänderungen zulassen?") Noch im Spiel ist. Nein, Sie erhalten nur eine Schaltfläche Abbrechen und müssen Ihre Änderungen erneut vornehmen. SQL Server ist am dümmsten.
Mike Gledhill
2
@ Mike Gledhill Grüße von 2019 und dies ist immer noch der Fall LOL
Captain Kenpachi
116

Extras> Optionen

Geben Sie hier die Bildbeschreibung ein

Deaktivieren Sie die obige Option

Prasanna
quelle
5
Danke für den Screenshot. Ich suchte nach so etwas, um diese dumme Option zu finden. Der Dialog sollte ein Kontrollkästchen für "Mach es trotzdem" haben, wenn er sagt, dass du es nicht kannst.
Chris Benard
2
Die beste Vorgehensweise Nachdem Sie diese Option geändert haben,
aktivieren
Danke für das Bild. Es ist sehr nützlich :)
M A.
72

Verwenden Sie SQL-Anweisungen, um dieses Problem zu umgehen und Änderungen an der Metadatenstruktur einer Tabelle vorzunehmen.

Dieses Problem tritt auf, wenn die Option "Speichern von Änderungen verhindern, die eine Neuerstellung der Tabelle erfordern" aktiviert ist.

Quelle: Fehlermeldung beim Versuch, eine Tabelle in SQL Server 2008 zu speichern: "Das Speichern von Änderungen ist nicht zulässig."

Daniel Vassallo
quelle
12
Meine Frage hier lautet: Warum verwendet SQL Server nicht die erforderlichen T-SQL-Anweisungen, anstatt die Tabelle für jede einzelne Änderung zu löschen und neu zu erstellen? Ich kann dieses Verhalten nicht verstehen.
Jaime
15

Anstatt das Kontrollkästchen zu deaktivieren (eine schlechte Lösung), sollten Sie die Bearbeitung von Daten auf diese Weise beenden. Wenn Daten geändert werden müssen, führen Sie sie mit einem Skript aus, damit Sie sie problemlos in die Produktion portieren können und unter Quellcodeverwaltung stehen. Dies erleichtert auch das Aktualisieren von Teständerungen, nachdem die Produktion auf dev heruntergeschoben wurde, damit Entwickler mit neueren Daten arbeiten können.

HLGEM
quelle
2
A) Sie können das von SSMS generierte Skript kopieren und in Ihrer Produktionsumgebung verwenden. B) SSMS ist oft einfacher, schneller und sicherer, da SSMS alle Details für Sie erledigt.
Trisped
2
Itg ist immer noch eine sehr schlechte Idee. Sie möchten keine 10.000.000-Datensatztabelle auf prod neu erstellen. Es ist nicht schneller. Wie ist es sicherer? Schlechte Daten sind schlechte Daten, und die Konsistenzprüfungen funktionieren, wenn Sie ein von Ihnen geschriebenes Skript verwenden und SSMS eines schreiben lassen. In 100% der Fälle ist es eine schlechte Praxis.
HLGEM
15

Gehen Sie zu SSMS und versuchen Sie dies

Menü >> Extras >> Optionen >> Designer >> Deaktivieren Sie das Kontrollkästchen "Speichern von Änderungen, die eine Neuerstellung der Tabelle erfordern".

Hier ist eine sehr gute Erklärung dazu: http://blog.sqlauthority.com/2009/05/18/sql-server-fix-management-studio-error-saving-changes-in-not-permitted-the-changes - Sie haben die folgenden Tabellen benötigt, die gelöscht und neu erstellt werden müssen. Sie haben entweder Änderungen an einer Registerkarte vorgenommen.

Rolwin Crasta
quelle
14

Für viele Änderungen, die Sie im Tabelleneditor von SQL Server Management Studio sehr einfach und visuell vornehmen können, muss SSMS die Tabelle im Hintergrund ablegen und von Grund auf neu erstellen. Selbst einfache Dinge wie das Neuordnen der Spalten können nicht in der Standard-SQL-DDL-Anweisung ausgedrückt werden. SSMS kann lediglich die Tabelle löschen und neu erstellen.

Diese Operation kann a) auf einem großen Tisch sehr zeitaufwändig sein oder b) aus verschiedenen Gründen (wie FK-Einschränkungen und anderen Dingen) sogar fehlschlagen. Daher hat SSMS in SQL Server 2008 diese neue Option eingeführt, die die anderen Antworten bereits identifiziert haben.

Es mag zunächst kontraintuitiv erscheinen, solche Änderungen zu verhindern - und es ist sicherlich ein Ärgernis auf einem Entwicklungsserver. Auf einem Produktionsserver wird diese Option und ihr Standardwert zum Verhindern solcher Änderungen jedoch zu einem potenziellen Lebensretter!

marc_s
quelle
2
Ich bin jetzt auf einem Entwicklungsserver, aber auf einem Produktionsserver werde ich ihn auf jeden Fall wieder einschalten.
rem
1
Das Ändern der Größe einer nvarchar-Spalte von 100 auf 120 ist jedoch eine sehr einfache Operation, die mit ALTER TABLE problemlos durchgeführt werden kann. Warum löscht SQL Server (Management Studio) die Tabelle für eine solche Spalte und erstellt sie neu? Fälle?
Jaime
4
@Jaime: dass Sie die Entwickler dieses visuellen Designers fragen müssen - niemand sonst weiß es. Es ist nur eine Tatsache - mit dem visuellen Designer werden viele einfache Änderungen immer vorgenommen, indem die Tabelle neu erstellt und kopiert wird. Wenn Sie den einfachen Ansatz verwenden möchten, müssen Sie ihn selbst handhaben, indem Sie einige einfache T-SQL-Anweisungen schreiben und ausführen.
marc_s
1
Danke @marc_s Dies ist genau die Antwort, die ich erwartet hatte, obwohl ich wenig Vertrauen in sie hatte, einen versteckten Grund zu haben, der alles erklären würde :)
Jaime
1
Diese Einschränkung verhindert auch, dass sich die Objekt-ID ohne Ihr Wissen ändert (falls dies nicht erforderlich ist).
Trisped