Fehlermeldung beim Speichern einer Tabelle in SQL Server: „Das Speichern von Änderungen ist nicht zulässig.“

Gilt für: SQL Server 2008 ExpressSQL Server 2008 Express with Advanced ServicesSQL Server 2008 Standard

Problembeschreibung


Wenn Sie in Microsoft SQL Server 2008 mit der Datendefinitionssprache (Data Definition Language, DDL) eine Tabelle ändern und dann versuchen, die Tabelle zu speichern, wird möglicherweise die folgende Meldung angezeigt:

Das Speichern von Änderungen ist nicht zulässig. Die vorgenommenen Änderungen erfordern das Löschen und Neuerstellen der folgenden Tabellen. Sie haben entweder Änderungen an einer Tabelle vorgenommen, die nicht neu erstellt werden kann, oder die Option ‚Speichern von Änderungen verhindern, die die Neuerstellung der Tabelle erfordern‘ aktiviert.

Ursache


Das Problem tritt auf, wenn die Option Speichern von Änderungen verhindern, die die Neuerstellung der Tabelle erfordern aktiviert ist und Sie eine oder mehrere der folgenden Änderungen an der Tabelle vornehmen:
  • Sie ändern die Einstellung NULL-Werte zulassen für eine Spalte.
  • Sie ordnen Spalten in der Tabelle neu an.
  • Sie ändern den Spaltendatentyp.
  • Sie fügen eine neue Spalte hinzu.
Wenn Sie eine Tabelle so ändern, dass ihre Metadatenstruktur geändert wird, und dann die Tabelle speichern, muss diese auf der Basis dieser Änderungen neu erstellt werden. Bei der Neuerstellung der Tabelle sind Verluste von Metadaten und direkte Datenverluste möglich. Wenn Sie die Option Speichern von Änderungen verhindern, die die Neuerstellung der Tabelle erfordern im Abschnitt Designer im Fenster SQL Server Management Studio (SSMS) Options (Optionen für SQL Server Management Studio (SSMS)) aktivieren, wird die im Abschnitt „Problembeschreibung“ erwähnte Fehlermeldung angezeigt.

Problemumgehung


Umgehen Sie das Problem, indem Sie die Änderungen an der Metadatenstruktur einer Tabelle mit Transact-SQL-Anweisungen vornehmen. Weitere Informationen finden Sie im folgenden Kapitel der SQL Server-Onlinedokumentation:

http://msdn.microsoft.com/de-de/library/ms190273.aspx

Mit dem folgenden Befehl beispielsweise können Sie die Spalte MyDate in der Tabelle MyTable so ändern, dass NULL-Werte akzeptiert werden:

alter table MyTable alter column MyDate7 datetime NULL

Wichtig Wir empfehlen dringend, zur Problemumgehung nicht die Option Speichern von Änderungen verhindern, die die Neuerstellung der Tabelle erfordern zu deaktivieren. Weitere Informationen zu den mit dem Deaktivieren dieser Option verbundenen Risiken finden Sie im Abschnitt „Weitere Informationen“.

Status


Microsoft hat bestätigt, dass es sich hierbei um einen Fehler in den Microsoft-Produkten handelt, die im Abschnitt „Die Informationen in diesem Artikel beziehen sich auf“ aufgeführt sind.

Weitere Informationen


Gehen Sie wie folgt vor, um die Option Speichern von Änderungen verhindern, die die Neuerstellung der Tabelle erfordern zu ändern:
  1. Öffnen Sie SQL Server Management Studio (SSMS).
  2. Klicken Sie im Menü Extras auf Optionen.
  3. Klicken Sie im Navigationsbereich des Fensters Optionen auf Designer.
  4. Aktivieren oder deaktivieren Sie das Kontrollkästchen Speichern von Änderungen verhindern, die die Neuerstellung der Tabelle erfordern, und klicken Sie dann auf OK.
Hinweis Wenn Sie diese Option deaktivieren, werden Sie beim Speichern der Tabelle nicht gewarnt, dass durch Ihre Änderungen die Metadatenstruktur der Tabelle geändert wurde. In diesem Fall sind Datenverluste möglich, wenn Sie die Tabelle speichern.

Mit dem Deaktivieren der Option „Speichern von Änderungen verhindern, die die Neuerstellung der Tabelle erfordern“ verbundenes Risiko

Sie können zwar durch Deaktivieren dieser Option das Neuerstellen einer Tabelle vermeiden, aber es besteht auch die Möglichkeit, dass Änderungen verloren gehen. Beispiel: Sie aktivieren das Feature Änderungsnachverfolgung in SQL Server 2008, um Änderungen an der Tabelle nachzuverfolgen. Wenn Sie einen Vorgang ausführen, aufgrund dessen die Tabelle neu erstellt wird, wird die im Abschnitt „Problembeschreibung“ erwähnte Fehlermeldung angezeigt. Wenn Sie die Option jedoch deaktivieren, werden die vorhandenen Änderungsnachverfolgungsinformationen bei der Neuerstellung der Tabelle gelöscht. Daher empfehlen wir, das Problem nicht durch Deaktivieren der Option zu umgehen.

Gehen Sie wie folgt vor, um zu ermitteln, ob das Feature Änderungsnachverfolgung für eine Tabelle aktiviert ist:
  1. Suchen Sie in SQL Server Management Studio die Tabelle im Objekt-Explorer.
  2. Klicken Sie mit der rechten Maustaste auf die Tabelle, und klicken Sie dann auf Eigenschaften.
  3. Klicken Sie im Dialogfeld Tabelleneigenschaften auf Änderungsnachverfolgung.
Wenn der Wert des Elements Änderungsnachverfolgung auf Wahr festgelegt ist, ist die Option für die Tabelle aktiviert. Wenn der Wert auf Falsch festgelegt ist, ist die Option deaktiviert.

Wenn das Feature Änderungsnachverfolgung aktiviert ist, verwenden Sie Transact-SQL-Anweisungen, um die Metadatenstruktur der Tabelle zu ändern.

Schritte zum Reproduzieren des Problems

  1. Erstellen Sie in SQL Server Management Studio im Tool Tabellen-Designer eine Tabelle, die einen Primärschlüssel enthält.
  2. Klicken Sie mit der rechten Maustaste auf die Datenbank, in der sich die Tabelle befindet, und klicken Sie dann auf Eigenschaften.
  3. Klicken Sie im Dialogfeld Datenbankeigenschaften auf Änderungsnachverfolgung.
  4. Legen Sie den Wert des Elements Änderungsnachverfolgung auf Wahr fest, und klicken Sie dann auf OK.
  5. Klicken Sie mit der rechten Maustaste auf die Tabelle, und klicken Sie dann auf Eigenschaften.
  6. Klicken Sie im Dialogfeld Tabelleneigenschaften auf Änderungsnachverfolgung.
  7. Legen Sie den Wert des Elements Änderungsnachverfolgung auf Wahr fest, und klicken Sie dann auf OK.
  8. Klicken Sie im Menü Extras auf Optionen.
  9. Klicken Sie im Dialogfeld Optionen auf Designer.
  10. Aktivieren Sie das Kontrollkästchen Speichern von Änderungen verhindern, die die Neuerstellung der Tabelle erfordern, und klicken Sie dann auf OK.
  11. Ändern Sie im Tool Tabellen-Designer die Einstellung NULL-Werte zulassen für eine vorhandene Spalte.
  12. Versuchen Sie, die Änderung an der Tabelle zu speichern.