Сообщение об ошибке «Сохранение изменений не разрешено» в SSMS

Эта статья поможет вам решить проблему, при которой при попытке сохранить таблицу в SQL Server Management Studio (SSMS) отображается сообщение об ошибке.

Оригинальная версия продукта: SQL Server
Оригинальный номер базы знаний: 956176

Симптомы

При попытке сохранить таблицу после внесения изменений в таблицу с помощью конструктора в SQL Server Management Studio может появиться следующее сообщение об ошибке:

Сохранение изменений запрещено. Внесенные изменения требуют удаления и повторного создания следующих таблиц. Вы либо внесли изменения в таблицу, которую невозможно повторно создать, либо включили параметр «Запретить сохранение изменений, требующих повторного создания таблицы».

Эта проблема возникает при внесении одного или нескольких из следующих изменений в таблицу:

  • Вы изменяете параметр Разрешить значения NULL для столбца.
  • Вы изменяете порядок столбцов в таблице.
  • Вы изменяете тип данных столбца.
  • Вы добавляете новый столбец.
  • Вы изменяете filegroup таблицы или ее text/image данные.

Причина

Эта проблема возникает из-за того, что параметр Запретить сохранение изменений, требующих повторного создания таблицы включен по умолчанию в SQL Server Management Studio.

Когда вы изменяете таблицу таким образом, что изменяете структуру метаданных таблицы, а затем сохраняете таблицу, таблица должна быть создана повторно на основе этих изменений. Это может привести к потере метаданных и прямой потере данных во время повторного создания таблицы. Если включить параметр Запретить сохранение изменений, требующих повторного создания таблицы в разделе Конструктор окна Параметры Server Management Studio (SSMS) отобразится сообщение об ошибке, упомянутое в разделе «Симптомы».

Обходной путь

Чтобы обойти эту проблему, используйте операторы ALTER TABLE Transact-SQL для внесения изменений в структуру метаданных таблицы.

Например, чтобы изменить столбец MyDate типа datetime в таблице MyTable для принятия значений NULL, можно использовать:

alter table MyTable alter column MyDate7 datetime NULL

Важно!

Настоятельно рекомендуется не отключать параметр «Запретить сохранение изменений, требующих повторного создания таблицы», чтобы обойти эту проблему. Дополнительные сведения о рисках отключения этого параметра приведены в разделе «Дополнительные сведения».

Дополнительная информация

Чтобы изменить параметр Запретить сохранение изменений, требующих повторного создания таблицы, выполните следующие действия:

  1. Откройте Среда SQL Server Management Studio.

  2. В меню Сервис щелкните пункт Параметры.

  3. В области навигации окна Параметры щелкните Конструкторы.

  4. Установите или снимите флажок Запретить сохранение изменений, требующих повторного создания таблицы, затем нажмите кнопку ОК.

Примечание.

Если этот параметр отключен, при сохранении таблицы не отобразится предупреждение о том, что внесенные изменения изменили структуру метаданных таблицы. В этом случае при сохранении таблицы может произойти потеря данных.

Риск отключения параметра «Запретить сохранение изменений, требующих повторного создания таблицы»

Хотя отключение этого параметра поможет избежать повторного создания таблицы, это также может привести к потере изменений. Например, предположим, что вы включаете функцию «Отслеживание изменений» в SQL Server для отслеживания изменений в таблице. При выполнении операции, которая вызывает повторное создание таблицы, отобразится сообщение об ошибке, упомянутое в разделе Симптомы. Однако если отключить этот параметр, существующие сведения об отслеживании изменений будут удалены при повторном создании таблицы. Поэтому мы рекомендуем не отключать этот параметр, чтобы обойти эту проблему.

Чтобы определить, включена ли функция «Отслеживание изменений» для таблицы, выполните следующие действия:

  1. В SQL Server Management Studio найдите таблицу в обозревателе объектов.
  2. Щелкните таблицу правой кнопкой мыши и выберите пункт «Свойства».
  3. В диалоговом окне «Свойства таблицы» выберите «Отслеживание изменений». Если для элемента «Отслеживание изменений» задано значение True, этот параметр включен для таблицы. Если значение — False, этот параметр отключен.

Если функция Change Tracking включена, используйте операторы Transact-SQL, чтобы изменить структуру метаданных таблицы.

Действия по воспроизведению проблемы

  1. В SQL Server Management Studio создайте таблицу, содержащую первичный ключ в конструкторе таблиц.
  2. Щелкните правой кнопкой мыши базу данных,содержащую эту таблицу, и выберите пункт Свойства.
  3. В диалоговом окне Свойства базы данных нажмите Отслеживание изменений.
  4. Задайте для элемента Отслеживание изменений значение True и нажмите кнопку ОК.
  5. Щелкните таблицу правой кнопкой мыши и выберите пункт Свойства.
  6. В диалоговом окне Свойства таблицы нажмите Отслеживание изменений.
  7. Задайте для элемента Отслеживание изменений значение True и нажмите кнопку ОК.
  8. В меню Сервис щелкните пункт Параметры.
  9. В диалоговом окне Параметры выберите Конструкторы.
  10. Установите флажок Запретить сохранение изменений, требующих повторного создания таблицы и нажмите кнопку ОК.
  11. В конструкторе таблиц измените параметр Разрешить значения NULL для существующего столбца.
  12. Попробуйте сохранить изменение в таблице.