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


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

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

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

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

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

604

2017-07-24 23:22

источник

Ответы:

Из Диалоговое окно «Сохранить (не разрешено)» на MSDN :

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

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

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

Чтобы изменить этот параметр, на инструменты меню, нажмите Опции , развернуть Конструкторы , а затем нажмите Дизайнеры таблиц и баз данных ,   Выберите или снимите Запретить сохранение изменений, требующих, чтобы таблица была   воссозданной установите флажок.

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

1194

2017-07-24 23:26

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

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

157

2017-07-24 23:27

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

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

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

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

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

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

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

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

51

2017-07-01 10:42

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

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

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

18

2018-01-22 11:03

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

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

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

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

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

18

2018-01-18 10:15

Go on Tool located at top menu.Choose options from dropdown.You have a popup now select Designers option located on left hand block of menus. Uncheck the option Prevent saving changes that require table re-creation. Click on OK Button.

16

2018-04-14 15:39

Un-tick the Prevent saving changes that require table re-creation box from Tools ► Options ► Designers tab.

SQL Server 2012 example:

10

2017-08-27 05:44

And just in case someone here is also not paying attention (like me):

For Microsoft SQL Server 2012, in the options dialogue box, there is a sneaky little check box that APPARENTLY hides all other setting. Although I got to say that I have missed that little monster all this time!!!

After that, you may proceed with the steps, designer, uncheck prevent saving blah blah blah...

6

2018-03-21 07:47

Copied from this link " ... Important We strongly recommend that you do not work around this problem by turning off the Prevent saving changes that require table re-creation option. For more information about the risks of turning off this option, see the "More information" section. ''

" ...To work around this problem, use Transact-SQL statements to make the changes to the metadata structure of a table. For additional information refer to the following topic in SQL Server Books Online

For example, to change MyDate column of type datetime in at table called MyTable to accept NULL values you can use:

alter table MyTable alter column MyDate7 datetime NULL "

3

2017-09-30 05:25

Tools >> Options >> Designers and uncheck “Prevent Saving changes that require table re-creation”:

3

2018-02-17 09:56

programmerz.ru

Сохранение изменений после редактирования таблицы в SQL Server Management Studio

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

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

Что может помешать легко редактировать таблицу? Или, это обычный способ для SQL Server Management Studio потребовать повторного создания таблицы для редактирования? Что это - это ". Запретить сохранение изменений" ?

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

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

Инструменты> Параметры

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

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

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!

programmerz.ru

Msgstr "Предотвратить сохранение изменений, требующих повторной сборки таблицы".

преамбула

Я изменил колонку в SQL Server 2008 сегодня, изменив тип данных с чего-то вроде валюты (18,0) - (19,2).

Я получил сообщение об ошибке «Выполненные вами изменения требуют, чтобы следующие таблицы были удалены и заново созданы» из SQL Server.

Прежде чем вы начнете отвечать, пожалуйста, прочитайте следующее:

Я уже знаю, что есть возможность в Инструменты ► Функции ► Конструктор ► Дизайнеры таблиц и баз данных ► Снимите флажок  Msgstr "Предотвратить сохранение изменений, требующих повторного создания таблицы."   

  ...так не  ответьте на это!

Актуальный вопрос

Мой реальный вопрос заключается в следующем:

Есть ли какие-либо негативные последствия / возможные недостатки в этом?

Действительно ли таблица удаляется и автоматически воссоздается, когда этот флажок не установлен?

Если да, то скопируйте таблицу на 100% точную копию исходной таблицы?

207

2017-08-03 19:55

источник

Ответы:

Стол только отбрасывается и воссоздается в тех случаях, когда это единственный способ, которым SQL Server Management Studio запрограммирован, чтобы знать, как это сделать.

Конечно, есть случаи, когда он будет делать это, когда это не нужно, но также будут случаи, когда изменения, внесенные вами в Management Studio, будут не  падение и воссоздание, потому что это не обязательно.

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

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

78

2017-08-03 19:58

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

240

2018-06-19 16:21

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

11

2017-08-04 11:27

SQL Server уменьшает и воссоздает таблицы только в том случае, если вы:

  • Добавить новый столбец
  • Измените параметр Allow Nulls для столбца
  • Изменение порядка столбцов в таблице
  • Изменение типа данных столбца

Использование ALTER более безопасно, так как в случае потери метаданных при повторном создании таблицы ваши данные будут потеряны.

11

2017-09-04 20:47

Да, есть негативные последствия от этого:

Если вы создаете сценарий изменений, заблокированных этим флагом, вы получаете что-то вроде сценария ниже (все, что я превращаю в столбец ID в Contact в столбец с номером autonumbered IDENTITY, но в таблице есть зависимости). Обратите внимание на возможные ошибки, которые могут возникнуть при выполнении следующего:

  1. Даже Microsoft предупреждает, что это может привести к потере данных (этот комментарий автогенерируется)!
  2. в течение некоторого периода времени внешние ключи не применяются.
  3. если вы вручную запускаете это в ssms, а «EXEC» («INSERT INTO» завершается с ошибкой, и вы запускаете следующие операторы (что они делают по умолчанию, так как они разделяются на «go»), тогда вы вставляете 0 строк, затем отбрасываете старый стол.
  4. если это большая таблица, время выполнения вставки может быть большим, а транзакция удерживает блокировку модификации схемы, поэтому блоки многие  вещи.

-

/* To prevent any potential data loss issues, you should review this script in detail before running it outside the context of the database designer.*/ BEGIN TRANSACTION GO ALTER TABLE raw.Contact DROP CONSTRAINT fk_Contact_AddressType GO ALTER TABLE ref.ContactpointType SET (LOCK_ESCALATION = TABLE) GO COMMIT BEGIN TRANSACTION GO ALTER TABLE raw.Contact DROP CONSTRAINT fk_contact_profile GO ALTER TABLE raw.Profile SET (LOCK_ESCALATION = TABLE) GO COMMIT BEGIN TRANSACTION GO CREATE TABLE raw.Tmp_Contact ( ContactID int NOT NULL IDENTITY (1, 1), ProfileID int NOT NULL, AddressType char(2) NOT NULL, ContactText varchar(250) NULL ) ON [PRIMARY] GO ALTER TABLE raw.Tmp_Contact SET (LOCK_ESCALATION = TABLE) GO SET IDENTITY_INSERT raw.Tmp_Contact ON GO IF EXISTS(SELECT * FROM raw.Contact) EXEC('INSERT INTO raw.Tmp_Contact (ContactID, ProfileID, AddressType, ContactText) SELECT ContactID, ProfileID, AddressType, ContactText FROM raw.Contact WITH (HOLDLOCK TABLOCKX)') GO SET IDENTITY_INSERT raw.Tmp_Contact OFF GO ALTER TABLE raw.PostalAddress DROP CONSTRAINT fk_AddressProfile GO ALTER TABLE raw.MarketingFlag DROP CONSTRAINT fk_marketingflag_contact GO ALTER TABLE raw.Phones DROP CONSTRAINT fk_phones_contact GO DROP TABLE raw.Contact GO EXECUTE sp_rename N'raw.Tmp_Contact', N'Contact', 'OBJECT' GO ALTER TABLE raw.Contact ADD CONSTRAINT Idx_Contact_1 PRIMARY KEY CLUSTERED ( ProfileID, ContactID ) GO ALTER TABLE raw.Contact ADD CONSTRAINT Idx_Contact UNIQUE NONCLUSTERED ( ProfileID, ContactID ) GO CREATE NONCLUSTERED INDEX idx_Contact_0 ON raw.Contact ( AddressType ) GO ALTER TABLE raw.Contact ADD CONSTRAINT fk_contact_profile FOREIGN KEY ( ProfileID ) REFERENCES raw.Profile ( ProfileID ) ON UPDATE NO ACTION ON DELETE NO ACTION GO ALTER TABLE raw.Contact ADD CONSTRAINT fk_Contact_AddressType FOREIGN KEY ( AddressType ) REFERENCES ref.ContactpointType ( ContactPointTypeCode ) ON UPDATE NO ACTION ON DELETE NO ACTION GO COMMIT BEGIN TRANSACTION GO ALTER TABLE raw.Phones ADD CONSTRAINT fk_phones_contact FOREIGN KEY ( ProfileID, PhoneID ) REFERENCES raw.Contact ( ProfileID, ContactID ) ON UPDATE NO ACTION ON DELETE NO ACTION GO ALTER TABLE raw.Phones SET (LOCK_ESCALATION = TABLE) GO COMMIT BEGIN TRANSACTION GO ALTER TABLE raw.MarketingFlag ADD CONSTRAINT fk_marketingflag_contact FOREIGN KEY ( ProfileID, ContactID ) REFERENCES raw.Contact ( ProfileID, ContactID ) ON UPDATE NO ACTION ON DELETE NO ACTION GO ALTER TABLE raw.MarketingFlag SET (LOCK_ESCALATION = TABLE) GO COMMIT BEGIN TRANSACTION GO ALTER TABLE raw.PostalAddress ADD CONSTRAINT fk_AddressProfile FOREIGN KEY ( ProfileID, AddressID ) REFERENCES raw.Contact ( ProfileID, ContactID ) ON UPDATE NO ACTION ON DELETE NO ACTION GO ALTER TABLE raw.PostalAddress SET (LOCK_ESCALATION = TABLE) GO COMMIT

1

2017-10-15 23:31

programmerz.ru

Msgstr "Предотвратить сохранение изменений, требующих повторной сборки таблицы".

преамбула

Я изменил колонку в SQL Server 2008 сегодня, изменив тип данных с чего-то вроде валюты (18,0) - (19,2).

Я получил сообщение об ошибке «Выполненные вами изменения требуют, чтобы следующие таблицы были удалены и заново созданы» из SQL Server.

Прежде чем вы начнете отвечать, пожалуйста, прочитайте следующее:

Я уже знаю, что есть возможность в Инструменты ► Функции ► Конструктор ► Дизайнеры таблиц и баз данных ► Снимите флажок  Msgstr "Предотвратить сохранение изменений, требующих повторного создания таблицы."      ...так не  ответьте на это!

Актуальный вопрос

Мой реальный вопрос заключается в следующем:

Есть ли какие-либо негативные последствия / возможные недостатки в этом?

Действительно ли таблица удаляется и автоматически воссоздается, когда этот флажок не установлен?

Если да, то скопируйте таблицу на 100% точную копию исходной таблицы?

207

2017-08-03 19:55

источник

Ответы:

Стол только отбрасывается и воссоздается в тех случаях, когда это единственный способ, которым SQL Server Management Studio запрограммирован, чтобы знать, как это сделать.

Конечно, есть случаи, когда он будет делать это, когда это не нужно, но также будут случаи, когда изменения, внесенные вами в Management Studio, будут не  падение и воссоздание, потому что это не обязательно.

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

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

78

2017-08-03 19:58

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

240

2018-06-19 16:21

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

11

2017-08-04 11:27

SQL Server уменьшает и воссоздает таблицы только в том случае, если вы:

  • Добавить новый столбец
  • Измените параметр Allow Nulls для столбца
  • Изменение порядка столбцов в таблице
  • Изменение типа данных столбца

Использование ALTER более безопасно, так как в случае потери метаданных при повторном создании таблицы ваши данные будут потеряны.

11

2017-09-04 20:47

Да, есть негативные последствия от этого:

Если вы создаете сценарий изменений, заблокированных этим флагом, вы получаете что-то вроде сценария ниже (все, что я превращаю в столбец ID в Contact в столбец с номером autonumbered IDENTITY, но в таблице есть зависимости). Обратите внимание на возможные ошибки, которые могут возникнуть при выполнении следующего:

  1. Даже Microsoft предупреждает, что это может привести к потере данных (этот комментарий автогенерируется)!
  2. в течение некоторого периода времени внешние ключи не применяются.
  3. если вы вручную запускаете это в ssms, а «EXEC» («INSERT INTO» завершается с ошибкой, и вы запускаете следующие операторы (что они делают по умолчанию, так как они разделяются на «go»), тогда вы вставляете 0 строк, затем отбрасываете старый стол.
  4. если это большая таблица, время выполнения вставки может быть большим, а транзакция удерживает блокировку модификации схемы, поэтому блоки многие  вещи.

-

/* To prevent any potential data loss issues, you should review this script in detail before running it outside the context of the database designer.*/ BEGIN TRANSACTION GO ALTER TABLE raw.Contact DROP CONSTRAINT fk_Contact_AddressType GO ALTER TABLE ref.ContactpointType SET (LOCK_ESCALATION = TABLE) GO COMMIT BEGIN TRANSACTION GO ALTER TABLE raw.Contact DROP CONSTRAINT fk_contact_profile GO ALTER TABLE raw.Profile SET (LOCK_ESCALATION = TABLE) GO COMMIT BEGIN TRANSACTION GO CREATE TABLE raw.Tmp_Contact ( ContactID int NOT NULL IDENTITY (1, 1), ProfileID int NOT NULL, AddressType char(2) NOT NULL, ContactText varchar(250) NULL ) ON [PRIMARY] GO ALTER TABLE raw.Tmp_Contact SET (LOCK_ESCALATION = TABLE) GO SET IDENTITY_INSERT raw.Tmp_Contact ON GO IF EXISTS(SELECT * FROM raw.Contact) EXEC('INSERT INTO raw.Tmp_Contact (ContactID, ProfileID, AddressType, ContactText) SELECT ContactID, ProfileID, AddressType, ContactText FROM raw.Contact WITH (HOLDLOCK TABLOCKX)') GO SET IDENTITY_INSERT raw.Tmp_Contact OFF GO ALTER TABLE raw.PostalAddress DROP CONSTRAINT fk_AddressProfile GO ALTER TABLE raw.MarketingFlag DROP CONSTRAINT fk_marketingflag_contact GO ALTER TABLE raw.Phones DROP CONSTRAINT fk_phones_contact GO DROP TABLE raw.Contact GO EXECUTE sp_rename N'raw.Tmp_Contact', N'Contact', 'OBJECT' GO ALTER TABLE raw.Contact ADD CONSTRAINT Idx_Contact_1 PRIMARY KEY CLUSTERED ( ProfileID, ContactID ) GO ALTER TABLE raw.Contact ADD CONSTRAINT Idx_Contact UNIQUE NONCLUSTERED ( ProfileID, ContactID ) GO CREATE NONCLUSTERED INDEX idx_Contact_0 ON raw.Contact ( AddressType ) GO ALTER TABLE raw.Contact ADD CONSTRAINT fk_contact_profile FOREIGN KEY ( ProfileID ) REFERENCES raw.Profile ( ProfileID ) ON UPDATE NO ACTION ON DELETE NO ACTION GO ALTER TABLE raw.Contact ADD CONSTRAINT fk_Contact_AddressType FOREIGN KEY ( AddressType ) REFERENCES ref.ContactpointType ( ContactPointTypeCode ) ON UPDATE NO ACTION ON DELETE NO ACTION GO COMMIT BEGIN TRANSACTION GO ALTER TABLE raw.Phones ADD CONSTRAINT fk_phones_contact FOREIGN KEY ( ProfileID, PhoneID ) REFERENCES raw.Contact ( ProfileID, ContactID ) ON UPDATE NO ACTION ON DELETE NO ACTION GO ALTER TABLE raw.Phones SET (LOCK_ESCALATION = TABLE) GO COMMIT BEGIN TRANSACTION GO ALTER TABLE raw.MarketingFlag ADD CONSTRAINT fk_marketingflag_contact FOREIGN KEY ( ProfileID, ContactID ) REFERENCES raw.Contact ( ProfileID, ContactID ) ON UPDATE NO ACTION ON DELETE NO ACTION GO ALTER TABLE raw.MarketingFlag SET (LOCK_ESCALATION = TABLE) GO COMMIT BEGIN TRANSACTION GO ALTER TABLE raw.PostalAddress ADD CONSTRAINT fk_AddressProfile FOREIGN KEY ( ProfileID, AddressID ) REFERENCES raw.Contact ( ProfileID, ContactID ) ON UPDATE NO ACTION ON DELETE NO ACTION GO ALTER TABLE raw.PostalAddress SET (LOCK_ESCALATION = TABLE) GO COMMIT

1

2017-10-15 23:31

programmerz.ru

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

На этот вопрос уже есть ответ:

Когда я пытаюсь изменить тип данных своей таблицы, я получаю это ужасное сообщение от SQL Management Studion: «Сохранение изменений не разрешено. Для внесенных изменений требуются удаление и повторное создание следующих таблиц». Я уже пытался сделать модификацию T-SQL, и это сработало, но почему я не могу это сделать только в режиме разработки? Я использую SQL Server 2008 R2.

Я настоятельно рекомендую вам использовать T-SQL для внесения изменений или, по крайней мере, для предварительного просмотра сценариев, создаваемых Дизайнерами до их совершения. Однако, если вы хотите сделать это в дизайнере, вы можете отключить эту блокировку, перейдя в Инструменты ... Параметры ... Дизайнеры .. Конструкторы таблиц и баз данных .. и отмените «запрет сохранения изменений, создание".

Эта блокировка включена по умолчанию; это препятствует вам совершать некоторые изменения, которые запутываются дизайнером.

EDIT: Как отмечено в комментарии ниже, вы не можете просмотреть изменения, если вы не отключите блокировку. Я хочу сказать, что если вы хотите использовать table-designer для работы с таблицей с отключенной этой функцией, вы обязательно должны всегда просматривать изменения перед их выполнением. Короче говоря, варианты:

  • ЛУЧШИЙ ПРОЦЕСС: Используйте T-SQL
  • NOT GREAT: отключить блокировку, использовать таблицу Дизайнер и ВСЕГДА просмотреть изменения
  • CRAZY TALK: Нажмите несколько кнопок.

Чтобы изменить изменения «Предотвращение сохранения», для которых требуется повторное создание таблицы, выполните следующие действия: Откройте SQL Server Management Studio (SSMS). В меню «Сервис» выберите «Параметры». В навигационной панели окна «Параметры» выберите «Дизайнеры». Выберите или снимите флажок «Предотвратить сохранение изменений, требующих повторного создания таблицы», а затем нажмите «ОК».

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

programmerz.ru

[sql-server-2005] Msgstr "Предотвратить сохранение изменений, требующих повторной сборки таблицы". [database-design] [sql-server-2008]

Стол только отбрасывается и воссоздается в тех случаях, когда это единственный способ, которым SQL Server Management Studio запрограммирован, чтобы знать, как это сделать.

Конечно, есть случаи, когда он будет делать это, когда это не нужно, но также будут случаи, когда изменения, внесенные вами в Management Studio, не будут падать и воссоздаваться, потому что этого не нужно.

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

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

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

Да, есть негативные последствия от этого:

Если вы создаете сценарий изменений, заблокированных этим флагом, вы получаете что-то вроде сценария ниже (все, что я превращаю в столбец ID в Contact в столбец с номером autonumbered IDENTITY, но в таблице есть зависимости). Обратите внимание на возможные ошибки, которые могут возникнуть при выполнении следующего:

  1. Даже Microsoft предупреждает, что это может привести к потере данных (этот комментарий автогенерируется)!
  2. в течение некоторого периода времени внешние ключи не применяются.
  3. если вы вручную запускаете это в ssms, а «EXEC» («INSERT INTO» завершается с ошибкой, и вы запускаете следующие операторы (что они делают по умолчанию, так как они разделяются на «go»), тогда вы вставляете 0 строк, затем отбрасываете старый стол.
  4. если это большая таблица, среда выполнения вставки может быть большой, и транзакция удерживает блокировку модификации схемы, поэтому блокирует многие вещи.

-

/* To prevent any potential data loss issues, you should review this script in detail before running it outside the context of the database designer.*/ BEGIN TRANSACTION GO ALTER TABLE raw.Contact DROP CONSTRAINT fk_Contact_AddressType GO ALTER TABLE ref.ContactpointType SET (LOCK_ESCALATION = TABLE) GO COMMIT BEGIN TRANSACTION GO ALTER TABLE raw.Contact DROP CONSTRAINT fk_contact_profile GO ALTER TABLE raw.Profile SET (LOCK_ESCALATION = TABLE) GO COMMIT BEGIN TRANSACTION GO CREATE TABLE raw.Tmp_Contact ( ContactID int NOT NULL IDENTITY (1, 1), ProfileID int NOT NULL, AddressType char(2) NOT NULL, ContactText varchar(250) NULL ) ON [PRIMARY] GO ALTER TABLE raw.Tmp_Contact SET (LOCK_ESCALATION = TABLE) GO SET IDENTITY_INSERT raw.Tmp_Contact ON GO IF EXISTS(SELECT * FROM raw.Contact) EXEC('INSERT INTO raw.Tmp_Contact (ContactID, ProfileID, AddressType, ContactText) SELECT ContactID, ProfileID, AddressType, ContactText FROM raw.Contact WITH (HOLDLOCK TABLOCKX)') GO SET IDENTITY_INSERT raw.Tmp_Contact OFF GO ALTER TABLE raw.PostalAddress DROP CONSTRAINT fk_AddressProfile GO ALTER TABLE raw.MarketingFlag DROP CONSTRAINT fk_marketingflag_contact GO ALTER TABLE raw.Phones DROP CONSTRAINT fk_phones_contact GO DROP TABLE raw.Contact GO EXECUTE sp_rename N'raw.Tmp_Contact', N'Contact', 'OBJECT' GO ALTER TABLE raw.Contact ADD CONSTRAINT Idx_Contact_1 PRIMARY KEY CLUSTERED ( ProfileID, ContactID ) GO ALTER TABLE raw.Contact ADD CONSTRAINT Idx_Contact UNIQUE NONCLUSTERED ( ProfileID,

code-examples.net