Меню

При сохранении возникли ошибки некоторые объекты базы данных не сохранены sql

Всем привет! Сегодня я расскажу об ошибке «Сохранение изменений запрещено», которая возникает в среде SQL Server Management Studio при работе с конструктором таблиц, будут рассмотрены причины ее возникновения и, конечно же, способы исправления данной ошибки.

Ошибка «Сохранение изменений запрещено» в среде SSMS. Причины и способы устранения

Заметка! Обзор функционала SQL Server Management Studio (SSMS).

Содержание

  1. Ошибка «Сохранение изменений запрещено»
  2. Причины возникновения ошибки «Сохранение изменений запрещено»
  3. Способы устранения ошибки «Сохранение изменений запрещено»
  4. Использовать T-SQL
  5. Отключить параметр «Запретить сохранение изменений, требующих повторного создания таблицы»

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

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

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

Скриншот 1

Причины возникновения ошибки «Сохранение изменений запрещено»

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

Однако это действие может привести к потере метаданных и прямой потере данных во время повторного создания таблицы.

Поэтому по умолчанию в среде SQL Server Management Studio включен параметр «Запретить сохранение изменений, требующих повторного создания таблицы». И если Вы используете графический конструктор таблиц, чтобы внести изменения в таблицу, например, Вы выполняете следующие действия:

  • Меняете параметр «Разрешить значения NULL» для столбца;
  • Изменяете порядок столбцов в таблице;
  • Изменяете тип данных столбца;
  • Добавляете новый столбец.

то в этих случаях Вы будете получать именно такую ошибку.

Способы устранения ошибки «Сохранение изменений запрещено»

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

Конечно же, существуют способы устранения данной ошибки и внесение изменений в таблицы. В частности, Вы можете использовать два.

Использовать T-SQL

Первый, и рекомендованный – это использовать инструкции T-SQL.

Заметка! Что такое T-SQL. Подробное описание для начинающих.

В качестве примера давайте представим, что у нас есть таблица Goods, и она имеет следующие данные.

   
   CREATE TABLE Goods(
	  ProductId INT IDENTITY(1,1) NOT NULL,
	  Category INT NOT NULL,
	  ProductName VARCHAR(100) NOT NULL,
	  Price MONEY NULL
   );

   INSERT INTO Goods (Category, ProductName, Price)
	    VALUES (1, 'Системный блок', 50),
		   (1, 'Клавиатура', 30),
		   (1, 'Монитор', 100),
		   (2, 'Планшет', 150),
		   (2, 'Смартфон', 100);

   SELECT * FROM Goods;

Скриншот 2

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

Изменяем параметр «Разрешить значения NULL»

Как видим, столбец Price на текущий момент у нас может принимать значения NULL, однако мы решили сделать этот столбец обязательным к заполнению и запретить хранение в нем значений NULL.

Курс по SQL для начинающих

Если мы будем использовать конструктор таблиц, то мы получим ошибку «Сохранение изменений запрещено».

Чтобы запретить хранение NULL значений, мы можем выполнить следующую инструкцию SQL

   
   ALTER TABLE Goods ALTER COLUMN Price MONEY NOT NULL;

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

Изменяем тип данных столбца

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

   
   ALTER TABLE Goods ALTER COLUMN Price NUMERIC(18,2) NOT NULL;

В данном случае мы изменили тип данных столбца Price с MONEY на NUMERIC.

Добавляем новый столбец

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

   
   ALTER TABLE Goods ADD ProductDescription VARCHAR(300) NULL;

В этом примере мы добавили столбец ProductDescription с типом данных VARCHAR.

К сожалению, изменение порядка столбцов в таблице на языке T-SQL не поддерживается, это возможно только путем пересоздания таблицы.

Заметка! Транзакции в T-SQL – основы для новичков с примерами.

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

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

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

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

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

Скриншот 3

После этого Вы сможете сохранять любые изменения в таблицах с помощью графического конструктора.

Заметка! Курсы по Transact-SQL для начинающих.

На сегодня это все, надеюсь, материал был Вам полезен, пока!

If I want to save any changes in a table, previously saved in SQL Server Management Studio (no data in table present) I get an error message:

Saving changes is not permitted. The changes you have made require the
following tables to be dropped and re-created. You have either made
changes to a table that can’t be re-created or enabled the option
Prevent saving changes that require the table to be re-created.

What can prevent the table to be easily edited? Or, is it the usual way for SQL Server Management Studio to require re-creating table for editing? What is it — this «option Prevent saving changes»?

Liam's user avatar

Liam

26.7k27 gold badges120 silver badges183 bronze badges

asked Dec 28, 2009 at 11:43

rem's user avatar

5

Go into Tools -> Options -> Designers-> Uncheck «Prevent saving changes that require table re-creation». Voila.

That happens because sometimes it is necessary to drop and recreate a table in order to change something. This can take a while, since all data must be copied to a temp table and then re-inserted in the new table. Since SQL Server by default doesn’t trust you, you need to say «OK, I know what I’m doing, now let me do my work.»

answered Dec 28, 2009 at 11:48

Pedro's user avatar

PedroPedro

11.3k5 gold badges27 silver badges40 bronze badges

9

Tools | Options | Designers | Table and Database Designers

Uncheck the option «Prevent saving changes that require table re-creation».

Pang's user avatar

Pang

9,335146 gold badges85 silver badges121 bronze badges

answered Sep 25, 2012 at 12:07

Prasanna's user avatar

PrasannaPrasanna

4,5232 gold badges22 silver badges29 bronze badges

3

Rather than unchecking the box (a poor solution), you should STOP editing data that way. If data must be changed, then do it with a script, so that you can easily port it to production and so that it is under source control. This also makes it easier to refresh testing changes after production has been pushed down to dev to enable developers to be working against fresher data.

answered Dec 28, 2009 at 21:34

HLGEM's user avatar

HLGEMHLGEM

93.6k15 gold badges111 silver badges182 bronze badges

3

answered Oct 29, 2014 at 7:31

Rolwin Crasta's user avatar

Rolwin CrastaRolwin Crasta

4,1593 gold badges35 silver badges45 bronze badges

Many changes you can make very easily and visually in the table editor in SQL Server Management Studio actually require SSMS to drop the table in the background and re-create it from scratch. Even simple things like reordering the columns cannot be expressed in standard SQL DDL statement — all SSMS can do is drop and recreate the table.

This operation can be a) very time consuming on a large table, or b) might even fail for various reasons (like FK constraints and stuff). Therefore, SSMS in SQL Server 2008 introduced that new option the other answers have already identified.

It might seem counter-intuitive at first to prevent such changes — and it’s certainly a nuisance on a dev server. But on a production server, this option and its default value of preventing such changes becomes a potential life-saver!

answered Dec 28, 2009 at 12:38

marc_s's user avatar

marc_smarc_s

721k173 gold badges1320 silver badges1442 bronze badges

5

Steps to reproduce the problem

  1. In SQL Server Management Studio, create a table that contains a primary key in the Table Designer tool.
  2. Right-click the database that contains this table, and then click Properties.
  3. In the Database Properties dialog box, click Change Tracking.
  4. Set the value of the Change Tracking item to True, and then click OK.
  5. Right-click the table, and then click Properties.
  6. In the Table Properties dialog box, click Change Tracking.
  7. Set the value of the Change Tracking item to True, and then click OK.
  8. On the Tools menu, click Options.
  9. In the Options dialog box, click Designers.
  10. Click to select the Prevent saving changes that require table re-creation check box, and then click OK.
  11. In the Table Designer tool, change the Allow Nulls setting on an existing column.
  12. Try to save the change to the table.

If I want to save any changes in a table, previously saved in SQL Server Management Studio (no data in table present) I get an error message:

Saving changes is not permitted. The changes you have made require the
following tables to be dropped and re-created. You have either made
changes to a table that can’t be re-created or enabled the option
Prevent saving changes that require the table to be re-created.

What can prevent the table to be easily edited? Or, is it the usual way for SQL Server Management Studio to require re-creating table for editing? What is it — this «option Prevent saving changes»?

Liam's user avatar

Liam

26.7k27 gold badges120 silver badges183 bronze badges

asked Dec 28, 2009 at 11:43

rem's user avatar

5

Go into Tools -> Options -> Designers-> Uncheck «Prevent saving changes that require table re-creation». Voila.

That happens because sometimes it is necessary to drop and recreate a table in order to change something. This can take a while, since all data must be copied to a temp table and then re-inserted in the new table. Since SQL Server by default doesn’t trust you, you need to say «OK, I know what I’m doing, now let me do my work.»

answered Dec 28, 2009 at 11:48

Pedro's user avatar

PedroPedro

11.3k5 gold badges27 silver badges40 bronze badges

9

Tools | Options | Designers | Table and Database Designers

Uncheck the option «Prevent saving changes that require table re-creation».

Pang's user avatar

Pang

9,335146 gold badges85 silver badges121 bronze badges

answered Sep 25, 2012 at 12:07

Prasanna's user avatar

PrasannaPrasanna

4,5232 gold badges22 silver badges29 bronze badges

3

Rather than unchecking the box (a poor solution), you should STOP editing data that way. If data must be changed, then do it with a script, so that you can easily port it to production and so that it is under source control. This also makes it easier to refresh testing changes after production has been pushed down to dev to enable developers to be working against fresher data.

answered Dec 28, 2009 at 21:34

HLGEM's user avatar

HLGEMHLGEM

93.6k15 gold badges111 silver badges182 bronze badges

3

answered Oct 29, 2014 at 7:31

Rolwin Crasta's user avatar

Rolwin CrastaRolwin Crasta

4,1593 gold badges35 silver badges45 bronze badges

Many changes you can make very easily and visually in the table editor in SQL Server Management Studio actually require SSMS to drop the table in the background and re-create it from scratch. Even simple things like reordering the columns cannot be expressed in standard SQL DDL statement — all SSMS can do is drop and recreate the table.

This operation can be a) very time consuming on a large table, or b) might even fail for various reasons (like FK constraints and stuff). Therefore, SSMS in SQL Server 2008 introduced that new option the other answers have already identified.

It might seem counter-intuitive at first to prevent such changes — and it’s certainly a nuisance on a dev server. But on a production server, this option and its default value of preventing such changes becomes a potential life-saver!

answered Dec 28, 2009 at 12:38

marc_s's user avatar

marc_smarc_s

721k173 gold badges1320 silver badges1442 bronze badges

5

Steps to reproduce the problem

  1. In SQL Server Management Studio, create a table that contains a primary key in the Table Designer tool.
  2. Right-click the database that contains this table, and then click Properties.
  3. In the Database Properties dialog box, click Change Tracking.
  4. Set the value of the Change Tracking item to True, and then click OK.
  5. Right-click the table, and then click Properties.
  6. In the Table Properties dialog box, click Change Tracking.
  7. Set the value of the Change Tracking item to True, and then click OK.
  8. On the Tools menu, click Options.
  9. In the Options dialog box, click Designers.
  10. Click to select the Prevent saving changes that require table re-creation check box, and then click OK.
  11. In the Table Designer tool, change the Allow Nulls setting on an existing column.
  12. Try to save the change to the table.

Те, кто регулярно выполняют создание и развертывание новых баз данных на основе Microsoft SQL Server, активно используют в своей работе такой инструмент, как Microsoft SQL Server Management Studio (SSMS). Он позволяет выполнить практически все операции, что требуются при обслуживании СУБД. В его составе, есть функционал, дизайнера таблиц и диаграмм структуры базы данных, с автоматическим созданием и обновлением таблиц в базе данных, их структуры, индексов и ключей.
При этом, по умолчанию, Microsoft SSMS настроен так, что не позволяет сохранять какие-либо изменения в диаграмме или дизайнере, которые могут повлиять на структуру таблиц, если нельзя внести изменения в структуру таблиц без их пересоздания. Это вполне объяснимо, тк у вас в таблицах могут быть данные, а пересоздание таблицы и уничножит. При это на экране будет появляться сообщение подобное тому что показано ниже: Saving Changes is not permitted (Сохранение изменений не допускается):

Saving Changes is not permitted
Чтобы исправить такое поведение, необходимо:

  1. Открыть SQL Server Management Studio
  2. В верхнем меню выбрать Tools -> Options
  3. В открывшемся окне в левом дерево выбрать Designers
  4. Убрать галочку Prevent saving changes that require table re-creation (Предотвращение сохранения изменений)
  5. Нажать OK для применения настроек

Prevent saving changes that require table re-creationПосле внесенных изменений, любое изменение структуры таблиц в дизайнере или диаграмме, при ее сохранении будет применяться на структуру базы данных, и при необходимости пересоздавать измененные объекты.

8 ответов

Перейдите в Инструменты → Параметры → Дизайнеры- > Снимите флажок «Предотвратить сохранение изменений, требующих повторного создания таблицы». Вуаля.

Это происходит потому, что иногда нужно отбрасывать и воссоздавать таблицу, чтобы что-то изменить. Это может занять некоторое время, поскольку все данные должны быть скопированы в временную таблицу, а затем повторно вставлены в новую таблицу. Поскольку SQL Server по умолчанию не доверяет вам, вам нужно сказать «ОК, я знаю, что я делаю, теперь позвольте мне выполнить мою работу».

Pedro
28 дек. 2009, в 12:14

Поделиться

Сервиs > Параметры

Изображение 4103

Снимите флажок выше опции

Prasanna
25 сен. 2012, в 13:11

Поделиться

Rolwin C
29 окт. 2014, в 09:05

Поделиться

Вместо того, чтобы снимать флажок (плохое решение), вы должны STOP редактировать данные таким образом. Если данные необходимо изменить, сделайте это с помощью script, чтобы вы могли легко перенести его на производство и так, чтобы он находился под контролем источника. Это также облегчает обновление тестовых изменений после того, как продукция была нажата до разработчика, чтобы разработчики могли работать с более свежими данными.

HLGEM
28 дек. 2009, в 22:27

Поделиться

Многие изменения, которые вы можете сделать очень легко и визуально в редакторе таблиц в SQL Server Management Studio, фактически требуют, чтобы SSMS удаляла таблицу в фоновом режиме и воссоздавала ее с нуля. Даже простые вещи, такие как переупорядочение столбцов, не могут быть выражены в стандартном заявлении SQL DDL — все, что может сделать SSMS, это сбросить и воссоздать таблицу.

Эта операция может быть a) очень трудоемкой на большой таблице или b) может даже завершиться по различным причинам (например, ограничения FK и прочее). Таким образом, SSMS в SQL Server 2008 представила этот новый вариант, остальные ответы уже определены.

Вначале может показаться интуитивно понятным, чтобы предотвратить такие изменения — и это, безусловно, неприятность на dev-сервере. Но на производственном сервере эта опция и ее значение по умолчанию для предотвращения таких изменений становится потенциальным спасателем!

marc_s
28 дек. 2009, в 13:13

Поделиться

Вот это видео показывает, как решить эту проблему

Ссылка на сайт

Eranga Gamagedara
23 дек. 2018, в 02:28

Поделиться

Ещё вопросы

  • 0Содержит вторую колонку с продуктами все в порядке
  • 1Как использовать RDKit для расчета молекулярных отпечатков пальцев и сходства списка структур SMILE?
  • 0Получение CORS node-http-proxy для ответа 200 на ОПЦИИ
  • 0Последний драйвер для tjdbc не работает — Talend
  • 0JSONExcepton: нет значения для GPS?
  • 1Eclipse — SharedClasses имеет ошибки пути сборки
  • 0addClass не работает для определенного идентификатора текстовой области
  • 0PHP обнаруживает тип запроса (GET, POST, PUT или DELETE) без использования $ _SERVER [‘REQUEST_METHOD’]
  • 0Можно ли рендерить файлы js с кодом Velocity внутри с помощью Spring MVC и Velocity-Toolbox?
  • 1Добавление изображений в ListView
  • 0QTableView, выберите и Shift + клик
  • 0ng-show не работает при использовании с пользовательскими директивами
  • 0Заголовок Angular-Tag, позволяющий дублировать значения
  • 0Visual Studio 2017 не может загрузить базу данных MySQL
  • 1поиск содержимого с метаданными в liferay
  • 1Использование AutoMapper при наличии оператора LINQ с несколькими .Include
  • 1Сделать запрос на публикацию во время промежуточного программного обеспечения
  • 0Почему фильтр не работает, когда внутри другого ng-repeat
  • 1Kivy возвращает ошибку, хотя все зависимости установлены
  • 0CanvasText на jquery flot не показывает расширенные символы ascii
  • 1Как улучшить массовую вставку Entity Framework
  • 1Android-обновление StateListDrawable проблема
  • 0Указатель в C ++ не инициализирован правильно
  • 1Преобразовать ‘Task <IList <T >>’ в ‘IList <T>’
  • 0Установить переменную для конкретной страницы в jquery
  • 1Как правильно создавать объекты, для которых требуются параметры, используя автофакт?
  • 0таблица противников. Условие
  • 0удаление анимации JavaScript
  • 0Назначение фонового изображения на панель инструментов ExtJs
  • 1Прерывание всех потоков с помощью CTRL + C [дубликаты]
  • 0Являются ли типы указателей единственным способом «предотвращения» вызова конструктора в объявлении?
  • 0C ++ Использование ASCII вместо буквы в перечислении
  • 1Как добавить `action` к элементу компонента в EmberJs?
  • 0Как проверить поля с помощью плагина проверки jquery
  • 1Доступ к защищенной WebHDFS Kerberos без SPnego
  • 1Dicom UnCompression от Dcm2dcm
  • 1Получите глубокий результат обучения между 0 и 1
  • 1Python, Pandas, чтобы соответствовать фрейму данных и указать результаты из списка
  • 0Отображать набор изображений с заголовком, сохраняя масштаб по высоте
  • 1Почему я не могу разобрать вложение javamail с помощью toString?
  • 0Ошибка на UIWebView с jQuery
  • 1Как случайным образом раскрасить сетку (каждая строка случайным цветом)
  • 1Невозможно нажать кнопку, используя элемент (by.css ()) с транспортиром на ionic2
  • 1Android: Как определить, что активность уходит в фон?
  • 0Рассчитать сумму подписки новых пользователей MySQL
  • 1Позвоните в Windows Calculator c #
  • 1Модель гауссовой смеси — Сингулярная матрица
  • 0Плагин jquery-file-upload застрял в бесконечном цикле, повторно отправляя те же данные после 2 ГБ
  • 0Серый фон
  • 0AngularJS: Задержка исчезает с $ timeout

Microsoft SQL Server Management Studio 2016

Многие, кто работал в программе Microsoft SQL Server Management Studio, сталкивался с такой ситуацией, когда при сохранении изменений в структуре таблицы возникала ошибка.

Microsoft SQL Server Management Studio. Ошибка

И что бы мы не делали, как бы мы не пытались сохранить изменения — программа нам не дает этого сделать. Можно удалить данную таблицу и создать такую же структуру заново. А если спустя несколько минут нам нужно внести еще изменения в структуру? Удалять и создавать структуру не вариант. Оказывается в программе есть параметр, отвечающий за сохранение изменений в структуре таблицы.

Для этого нам необходимо выбрать пункт меню Сервис -> Параметры.

Microsoft SQL Server Management Studio. Параметры

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

Теперь вы сможете легко изменять и сохранять изменения в ваших таблицах.

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • При сохранении были обнаружены ошибки однако существует возможность минимально сохранить файл
  • При установке amd catalyst control center выдает ошибку