Всем привет! Сегодня я расскажу об ошибке «Сохранение изменений запрещено», которая возникает в среде SQL Server Management Studio при работе с конструктором таблиц, будут рассмотрены причины ее возникновения и, конечно же, способы исправления данной ошибки.
Заметка! Обзор функционала SQL Server Management Studio (SSMS).
Содержание
- Ошибка «Сохранение изменений запрещено»
- Причины возникновения ошибки «Сохранение изменений запрещено»
- Способы устранения ошибки «Сохранение изменений запрещено»
- Использовать T-SQL
- Отключить параметр «Запретить сохранение изменений, требующих повторного создания таблицы»
Ошибка «Сохранение изменений запрещено»
Итак, ситуация: Вы вносите изменения в таблицу с помощью конструктора в среде SQL Server Management Studio, однако при попытке сохранить изменения Вы получаете следующую ошибку
Сохранение изменений запрещено. Чтобы сохранить изменения, необходимо удалить и повторно создать следующие таблицы. Либо изменения вносятся в таблицу, которую невозможно создать повторно, либо включен параметр «Запретить сохранение изменений, требующих повторного создания таблицы».
Причины возникновения ошибки «Сохранение изменений запрещено»
Дело в том, что при изменении таблицы с помощью конструктора с изменением структуры ее метаданных, чтобы сохранить все изменения, необходимо пересоздать таблицу на основе этих изменений, т.е. создать ее заново. Вы этого не видите, но это будет делать сама среда 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;
Заметка! Если Вас интересует язык SQL, то рекомендую почитать книгу «SQL код» – это самоучитель по языку SQL для начинающих программистов. В ней очень подробно рассмотрены основные конструкции языка.
Изменяем параметр «Разрешить значения NULL»
Как видим, столбец Price на текущий момент у нас может принимать значения NULL, однако мы решили сделать этот столбец обязательным к заполнению и запретить хранение в нем значений NULL.
Если мы будем использовать конструктор таблиц, то мы получим ошибку «Сохранение изменений запрещено».
Чтобы запретить хранение 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 в меню «Сервис -> Параметры» и на вкладке «Конструкторы» снимите галочку «Запретить сохранение изменений, требующих повторного создания таблицы» и нажмите «ОК».
После этого Вы сможете сохранять любые изменения в таблицах с помощью графического конструктора.
Заметка! Курсы по Transact-SQL для начинающих.
На сегодня это все, надеюсь, материал был Вам полезен, пока!
Многие, кто работал в программе Microsoft SQL Server Management Studio, сталкивался с такой ситуацией, когда при сохранении изменений в структуре таблицы возникала ошибка.
И что бы мы не делали, как бы мы не пытались сохранить изменения — программа нам не дает этого сделать. Можно удалить данную таблицу и создать такую же структуру заново. А если спустя несколько минут нам нужно внести еще изменения в структуру? Удалять и создавать структуру не вариант. Оказывается в программе есть параметр, отвечающий за сохранение изменений в структуре таблицы.
Для этого нам необходимо выбрать пункт меню Сервис -> Параметры.
В открывшемся окне Параметры в иерархическом меню найти пункт Конструкторы и раскрыть его. Затем выбрать пункт Конструкторы таблиц и баз данных. И как на рисунке выше снять галочку у параметра Запретить сохранение изменений, требующих повторного создания таблицы. После нажать на кнопку ОК.
Теперь вы сможете легко изменять и сохранять изменения в ваших таблицах.
Опытные разработчики о данной функции уже знают, а для новичков, возможно, сэкономит немного времени. Спасибо за внимание и до новых встреч!
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Я пытаюсь внести изменения в существующую таблицу и получаю эту ошибку при попытке сохранить:
Сохранение изменений не допускается. Изменения, которые вы внесли, требуют, чтобы следующие таблицы были удалены и повторно созданы. Вы внесли изменения в таблицу, которую невозможно воссоздать или включить параметр Запретить сохранение изменений, требующих воссоздания таблицы.
У меня есть только одна запись данных в базе данных — удалил бы это, разрешив проблему, или мне придется воссоздать таблицы, как подсказывает ошибка? (Это на SQL-Server 2008 R2)
Следующие действия могут потребовать воссоздания таблицы:
- Добавление нового столбца в середину таблицы
Удаление столбца
Изменение нулевой точности столбца
Изменение порядка столбцов
Изменение типа данных столбца
Чтобы изменить этот параметр, в меню «Сервис» выберите «Параметры», «Развернуть конструкторы», а затем «Дизайнеры таблиц и баз данных». Выберите или снимите флажок «Предотвратить сохранение», для которого требуется, чтобы таблица была заново создана.
обратитесь
вам нужно изменить настройки, чтобы сохранить изменения
- Откройте SQL Server Management Studio (SSMS).
В меню «Сервис» выберите «Параметры».
В навигационной панели окна «Параметры» щелкните «Дизайнеры».
Выберите или снимите флажок «Предотвратить сохранение изменений, требующих переопределение таблицы», и нажмите «ОК».
Goto -> Tools -> Options->Designers-> Warn on null primary keys and
Warn about tables affected
снимите флажок и повторите попытку
Введите минимум 50 символов
В процессе взаимодействия с программным обеспечением компании Майкрософт «SQL Server Management Studio», а конкретно при желании определить какие-либо корректировки в табличном структурировании, бывают случаи, когда выскакивает предупреждающее диалоговое окно с оповещением, что сохранение изменений в SQL запрещено. Полное полученное уведомление выглядит так:
«Сохранение изменений запрещено. Чтобы сохранить изменения, необходимо удалить и повторно воссоздать текущие таблицы. Либо изменения вносятся в таблицу, которую невозможно воссоздать повторно, либо активирован параметр «Запретить сохранение изменений, требующих повторного создания таблицы».
Когда появляется похожее сообщение в MS SQL, тогда программное обеспечение не даст вам возможность внести и сохранить какие-то изменения. Как видно, сообщение довольно внушительное. Поэтому не все его внимательно читают до конца. Обычно на слове «удалить» внимательность пользователей притупляется. Естественно, удалить имеющуюся таблицу и структуру можно, а потом воссоздать ее заново. Но представьте, что вы удалили и воссоздали новую таблицу, а через какое-то время опять ее структурное представление нужно немного отредактировать. В такой ситуации опять выскочит предупреждающее сообщение. Это ограничение можно исключить довольно простыми способами.
Снимаем ограничение в MS SQL «Сохранение изменений запрещено»
Важно отметить, что такое ограничение активируется, когда пользователь решает внести корректировки в табличную структуру, а не просто внести какую-то информацию в уже созданные табличные ячейки. Уведомление «Сохранение изменений запрещено» в MS SQL появляется в следующих случаях:
когда пользователь хочет переопределить параметр «запретить использование Nulls» для табличных колонок;
если пользователь пытается перестроить структуру табличных колонок;
когда пользователь пытается редактировать типаж информации, сохраняемой в колонке;
когда пользователь хочет обозначить новую табличную колонку;
и др.
На самом деле, такое оповещение появляется по одной простой причине — в табличных настройках MS SQL активирован параметр, предотвращающий внесение изменений в структурное оформление таблиц.
Снять это ограничение в MS SQL «Сохранение изменений запрещено» возможно двумя способами:
применить команду «ALTER TABLE»;
отключить параметр, предотвращающий внесение изменений в табличное структурирование.
Снимаем ограничение MS SQL «Сохранение изменений запрещено» при помощи «ALTER TABLE»
Команда «ALTER TABLE» — это специальная SQL-команда, которая используется для редактирования структуры SQL-таблиц. При помощи этой команды можно «обойти» ограничивающий параметр и модифицировать таблицу по своему вкусу.
Например, чтобы добавить новую колонку в нашу таблицу, можно воспользоваться таким синтаксисом:
ALTER TABLE<наименование_таблицы>
{ADD<наименование_добавляемой_колонки><тип_данных_колонки> [атрибуты_колонки]}
Другие инструкции, доступные в «ALTER TABLE»:
«DROP COLUMN» — используется для удаления любой колонки таблицы;
«ALTER COLUMN» — используется для изменения типа данных, сохраняемого в определенной колонке;
«ADD CHEK» — применяется, когда нужно добавить какое-то ограничение к информации в колонке таблицы;
«ADD FOREIGN KEY» — используется, когда колонке нужно добавить внешний ключ;
«ADD PRIMARY KEY» — применяется, когда колонке нужно добавить первичный ключ;
и др.
Решаем проблему MS SQL «Сохранение изменений запрещено», отключая ограничивающий параметр
Разрешить редактирование табличной структуры можно, если деактивировать ограничивающий параметр. Чтобы его деактивировать, следуйте алгоритму:
Запустите программное обеспечение Майкрософт SQL Server Management Studio.
В основном меню программы найдите подпункт «Сервис».
В этом подпункте найдите раздел «Параметры».
В этом разделе настроек отыщите подпункт «Конструкторы».
В этом подпункте настроек отыщите раздел «Конструкторы таблиц и баз данных».
В этом разделе уберите «галочку» с пункта «Запретить сохранение изменений, требующих повторного создания таблицы».
После этого вам осталось только сохранить настройки, нажав кнопку «Ок».
Деактивация данного параметра исключает появление уведомления в MS SQL «Сохранение изменений запрещено». Опытные пользователи MS SQL уже давно знают об этой функции. Но они также знают, что в некоторых случаях отключение этого параметра может привести к потере информации. Поэтому использовать данное решение нужно с осторожностью.
Заключение
Сегодня мы рассказали, как решается проблема MS SQL «Сохранение изменений запрещено». Решить ее можно одним из предложенных способов. Лучший способ — это отключение ограничивающего параметра в настройках программы.
I’m trying to make changes to an existing table and am getting this error when i try to save :
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.
I only have one data entry in the database — would deleting this solve the problem or do i have to re-create the tables as the error suggests? (This is on SQL-Server 2008 R2)
ashes999
9,91516 gold badges72 silver badges121 bronze badges
asked Jan 7, 2014 at 4:08
1
The following actions might require a table to be re-created:
- Adding a new column to the middle of the table
- Dropping a column
- Changing column nullability
- Changing the order of the columns
- Changing the data type of a column
To change this option, on the Tools menu, click Options, expand Designers, and then click Table and Database Designers. Select or clear the Prevent saving changes that require the table to be re-created check box.
refer
answered Jan 7, 2014 at 4:17
Nagaraj SNagaraj S
13.3k6 gold badges32 silver badges53 bronze badges
0
you need to change settings to save the changes
- Open SQL Server Management Studio (SSMS).
- On the Tools menu, click Options.
- In the navigation pane of the Options window, click Designers.
- Select or clear the Prevent saving changes that require the table re-creation check box, and then click OK.
answered Nov 14, 2014 at 16:30
Ali AdraviAli Adravi
21.4k9 gold badges85 silver badges83 bronze badges
0
Goto -> Tools -> Options->Designers-> Warn on null primary keys and
Warn about tables affected
uncheck and try again
answered Jan 7, 2014 at 4:25
senthilkumar2185senthilkumar2185
2,5163 gold badges22 silver badges35 bronze badges
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
27.4k28 gold badges126 silver badges188 bronze badges
asked Dec 28, 2009 at 11:43
4
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
PedroPedro
11.5k5 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
9,491146 gold badges81 silver badges122 bronze badges
answered Sep 25, 2012 at 12:07
PrasannaPrasanna
4,5832 gold badges22 silver badges29 bronze badges
3
answered Oct 29, 2014 at 7:31
Rolwin CrastaRolwin Crasta
4,2093 gold badges35 silver badges45 bronze badges
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
HLGEMHLGEM
94.4k15 gold badges112 silver badges186 bronze badges
3
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_smarc_s
729k175 gold badges1327 silver badges1455 bronze badges
5
Steps to reproduce the problem
- In SQL Server Management Studio, create a table that contains a primary key in the Table Designer tool.
- Right-click the database that contains this table, and then click Properties.
- In the Database Properties dialog box, click Change Tracking.
- Set the value of the Change Tracking item to True, and then click OK.
- Right-click the table, and then click Properties.
- In the Table Properties dialog box, click Change Tracking.
- Set the value of the Change Tracking item to True, and then click OK.
- On the Tools menu, click Options.
- In the Options dialog box, click Designers.
- Click to select the Prevent saving changes that require table re-creation check box, and then click OK.
- In the Table Designer tool, change the Allow Nulls setting on an existing column.
- Try to save the change to the table.
Я пытаюсь внести изменения в существующую таблицу и получаю эту ошибку при попытке сохранить:
Сохранение изменений не допускается. Изменения, которые вы внесли, требуют, чтобы следующие таблицы были удалены и повторно созданы. Вы внесли изменения в таблицу, которую невозможно воссоздать или включить параметр Запретить сохранение изменений, требующих воссоздания таблицы.
У меня есть только одна запись данных в базе данных — удалил бы это, разрешив проблему, или мне придется воссоздать таблицы, как подсказывает ошибка? (Это на SQL-Server 2008 R2)
Следующие действия могут потребовать воссоздания таблицы:
- Добавление нового столбца в середину таблицы
Удаление столбца
Изменение нулевой точности столбца
Изменение порядка столбцов
Изменение типа данных столбца
Чтобы изменить этот параметр, в меню «Сервис» выберите «Параметры», «Развернуть конструкторы», а затем «Дизайнеры таблиц и баз данных». Выберите или снимите флажок «Предотвратить сохранение», для которого требуется, чтобы таблица была заново создана.
обратитесь
вам нужно изменить настройки, чтобы сохранить изменения
- Откройте SQL Server Management Studio (SSMS).
В меню «Сервис» выберите «Параметры».
В навигационной панели окна «Параметры» щелкните «Дизайнеры».
Выберите или снимите флажок «Предотвратить сохранение изменений, требующих переопределение таблицы», и нажмите «ОК».
Goto -> Tools -> Options->Designers-> Warn on null primary keys and
Warn about tables affected
снимите флажок и повторите попытку
Введите минимум 50 символов
Многие, кто работал в программе Microsoft SQL Server Management Studio, сталкивался с такой ситуацией, когда при сохранении изменений в структуре таблицы возникала ошибка.
И что бы мы не делали, как бы мы не пытались сохранить изменения — программа нам не дает этого сделать. Можно удалить данную таблицу и создать такую же структуру заново. А если спустя несколько минут нам нужно внести еще изменения в структуру? Удалять и создавать структуру не вариант. Оказывается в программе есть параметр, отвечающий за сохранение изменений в структуре таблицы.
Для этого нам необходимо выбрать пункт меню Сервис -> Параметры.
В открывшемся окне Параметры в иерархическом меню найти пункт Конструкторы и раскрыть его. Затем выбрать пункт Конструкторы таблиц и баз данных. И как на рисунке выше снять галочку у параметра Запретить сохранение изменений, требующих повторного создания таблицы. После нажать на кнопку ОК.
Теперь вы сможете легко изменять и сохранять изменения в ваших таблицах.
Опытные разработчики о данной функции уже знают, а для новичков, возможно, сэкономит немного времени. Спасибо за внимание и до новых встреч!
If you have found a spelling error, please, notify us by selecting that text and tap on selected text.