Sql Server «Сохранение изменений не разрешено» ошибка ► Запретить сохранение изменений, которые требуют пересоздания таблицы

749

Когда я создаю таблицу в SQL Server и сохраняю ее, если я пытаюсь изменить дизайн таблицы, например изменить тип столбца с int на real, я получаю эту ошибку:

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

Почему я должен заново создать таблицу? Я просто хочу изменить тип данных с smallintна real.

Стол пуст, и я не использовал его до сих пор.

Сыпь
источник

Ответы:

1467

От Save (недопустима) Диалоговое окно на MSDN :

Save (недопустима) диалоговое окно предупреждает, что сохранение изменений не допускается , потому что изменения, внесенные требуют перечисленных таблиц , чтобы быть отброшены и воссозданы.

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

  • Добавление нового столбца в середину таблицы
  • Отбрасывание столбца
  • Изменение обнуляемости столбцов
  • Изменение порядка столбцов
  • Изменение типа данных столбца <<<<

Чтобы изменить этот параметр, в меню « Сервис» выберите « Параметры» , разверните « Конструкторы» и выберите « Конструкторы таблиц и баз данных» . Установите или снимите флажок « Запретить сохранение изменений, которые требуют пересоздания таблицы» .

См. Также Запись в блоге Colt Kwong:
сохранение изменений в SQL 2008 Management Studio запрещено.

Роберт Харви
источник
7
SSMS не должна позволять вам делать что-то небезопасное без предварительного предупреждения. Но на всякий случай имейте под рукой резервную копию.
Роберт Харви
40
Эта опция сообщает SSMS, что она может продолжить и создать временную таблицу в новой схеме, скопировать в нее данные, затем удалить старую таблицу и переименовать временную таблицу обратно в исходное имя. Все в порядке, как должно быть в транзакции, однако отношения будут нарушены и воссозданы, так что если не 100%, то может сделать что-то неожиданное.
Джастин Кинг,
13
Не знаю, почему я не могу вспомнить эти простые шаги, чтобы раскрыть эту опцию, и я всегда должен искать решение. Hehehehehe. Спасибо чувак!
Разработчик
8
Святая корова - ты можешь просто отключить это, чтобы обойти эту ошибку ?? Я не знал этого, и в течение последних 3 лет жил из-за страха непреднамеренного проектирования таблицы без Спецификации идентичности и необходимости создания новой таблицы. Отличный совет!
нокарьер
4
Вот Microsoft CAVEAT об отключении опции «Запретить сохранение изменений ...»: support.microsoft.com/en-us/kb/956176 . По сути, вы можете потерять метаданные, такие как отслеживание изменений, если вы используете эту функцию.
Baodad
205

Вы используете SSMS?

Если да, перейдите в меню Инструменты >> Параметры >> Дизайнеры и снимите флажок «Запретить сохранение изменений, которые требуют пересоздания таблицы»

ypercubeᵀᴹ
источник
Инструменты >> Параметры и т. Д., А не «Меню» (только с точки зрения ssms 2014, который, как я полагаю, в старых версиях одинаков)
Том Стиккель
@ TomStickel Я думаю, я имел в виду перейти в меню: «Инструменты»
ypercubeᵀᴹ
: P Да, я подумал, просто подумал, что прокомментирую любого, кто на самом деле «застрянет», я знаю, это страшно, но я полагаю, что некоторые люди могут быстро
вскинуть
2
@NeilMeyer остерегайтесь того, что флажок установлен там по причине. Это мера безопасности, предотвращающая операции, которые удаляют и воссоздают таблицу (и, следовательно, теряют все ее данные ! Так что используйте с осторожностью!
ypercubeᵀᴹ
будут ли потеряны связи между таблицами, если таблицы будут воссозданы следующим образом?
Нил Мейер
78

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

Пять быстрых кликов

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

  1. инструменты
  2. Опции
  3. Конструкторы
  4. Запретить сохранение изменений, которые требуют пересоздания таблицы
  5. OK .

После сохранения повторите процедуру, чтобы снова поставить галочку. Это защищает от случайной потери данных.

Дальнейшее объяснение

  • По умолчанию SQL Server Management Studio предотвращает удаление таблиц, поскольку при удалении таблицы ее содержимое теряется. *

  • При изменении типа данных столбца в представлении «Дизайн» таблицы при сохранении изменений база данных внутренне удаляет таблицу, а затем заново создает новую.

* Ваши конкретные обстоятельства не будут иметь последствий, так как ваш стол пуст. Я предоставляю это объяснение полностью, чтобы улучшить ваше понимание процедуры.

Чудотворец
источник
27

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

Откройте SQL Server Management Studio (SSMS). В меню Сервис выберите Параметры.

На панели навигации в окне «Параметры» выберите «Дизайнеры».

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

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

введите описание изображения здесь

Табиш Усман
источник
Дизайнер столов удобен, но вы не можете достичь всего с ним
Sitecore Sam
22

Это очень простая и простая проблема с настройкой, которую можно исправить за 5 секунд, выполнив следующие действия

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

  1. Откройте Microsoft SQL Server Management Studio 2008
  2. Нажмите Параметры меню Сервис, затем нажмите Параметры
  3. Выберите дизайнеров
  4. Снимите флажок «не сохранять изменения, которые требуют пересоздания таблицы»
  5. Нажмите ОК
  6. Попробуй переделать свой стол
  7. Ваши изменения будут выполнены по желанию
Ризван Джилл
источник
8
как это добавляет к принятому ответу каким-либо образом?
Бессмертный синий
17

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

ФИФО БИЗСОЛ
источник
12

Un-тик в Prevent saving changes that require table re-creationкоробку из Автомата ► Функции ► Дизайнеров вкладки.

Пример SQL Server 2012:

введите описание изображения здесь

Педрам
источник
12

Это можно легко изменить в Microsoft SQL Server .

  1. Откройте Microsoft SQL Server Management Studio 2008
  2. Нажмите Меню инструментов
  3. Нажмите Параметры
  4. Выберите дизайнеров
  5. Снимите флажок «Запретить сохранение изменений, которые требуют пересоздания таблицы»
  6. Нажмите ОК

введите описание изображения здесь

Иршад Ахмед Ахонзада
источник
7

Скопировано по этой ссылке "... Важно! Мы настоятельно рекомендуем вам не обходить эту проблему, отключив параметр Запретить сохранение изменений, требующий повторного создания таблицы. Для получения дополнительной информации о рисках отключения этой опции см." Более подробная информация "раздел".

«... Чтобы обойти эту проблему, используйте операторы Transact-SQL, чтобы внести изменения в структуру метаданных таблицы. Для получения дополнительной информации обратитесь к следующей теме в SQL Server.

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

изменить таблицу MyTable изменить столбец MyDate7 datetime NULL "

Панайотис
источник
2
С таким большим количеством ответов, говорящих об одном и том же, это был ответ, который я искал, так как в моей таблице были живые данные, которые я не хотел потерять. Мне нужно было обновить десятичный столбец с 0 десятичных разрядов до 2 десятичных разрядов, и простой оператор alter работал отлично!
Stitz
Трагедия здесь заключается в том, что SSMS должна делать именно это под капотом и, следовательно, не требовать опускания стола
m12lrpv
6

И на всякий случай кто-то здесь тоже не обращает внимания (как я):

Для Microsoft SQL Server 2012 в диалоговом окне параметров есть небольшой скрытый флажок, который ВНУТРИ скрывает все остальные настройки. Хотя я должен сказать, что я скучал по этому маленькому монстру все это время !!!

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

sneaky_check_box_in_option

Гелли Энн
источник
5

Инструменты >> Параметры >> Дизайнеры и снимите флажок «Запретить сохранение изменений, которые требуют пересоздания таблицы»:

Описание в формате фото

سیدرسول میرعظیمی
источник
2

1) Откройте инструмент, который находится сверху.
2) Выберите параметры из списка выбора.
3) Появилось всплывающее окно, и теперь вы можете выбрать вариант дизайнеров из списка меню слева.
4) Теперь для предотвращения сохранения изменений необходимо отменить проверку, что требовало пересоздания таблицы. Теперь нажмите ОК.

Ришабх Сет
источник
1

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

Огбонна Виталис
источник
0

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

Вам необходимо включить отслеживание изменений.

  • Щелкните правой кнопкой мыши по вашей базе данных и выберите Свойства
  • Нажмите отслеживание изменений и включите его
  • Перейдите Сервис -> Параметры -> Дизайнер снова и снимите флажок.
Эмре Караташоглу
источник
0

Если вы используете SQL Server Management Studio, перейдите в Инструменты >> Параметры >> Дизайнеры и снимите флажок «Запретить сохранение изменений, которые требуют пересоздания таблицы». Это работает со мной.

Тахер Чтайви
источник