Подтвердить что ты не робот

SQL Server Management Studio - добавление/перемещение столбцов требует сброса и повторного создания?

Почему я получаю сообщение о том, что таблица должна удаляться и повторно создаваться при добавлении/перемещении столбцов? Я считаю, что это происходит после добавления ограничений внешнего ключа.

Что я могу сделать, чтобы добавить новые столбцы, не отбрасывая таблицу?

4b9b3361

Ответ 1

"Prevent saving changes that require table re-creation"

Если вам больше интересно просто заставить SSMS прекратить ворчание, вы можете снять отметку с параметра "Предотвратить сохранение изменений, требующих повторного создания таблицы" в "Параметры- > Дизайнеры- > Таблицы и дизайнеры баз данных". Таблица по-прежнему будет удалена и воссоздана, но по крайней мере SSMS не будет приставать к вам так же сильно.

(Предполагается, что вы работаете в среде разработчика/тестовой среды или в производственной среде, где краткий провал в существовании таблицы ничего не повредит)

Ответ 2

Так как SQL Server Management Studio делает это (иногда)!

Вместо этого используйте TSQL ALTER TABLE:

ALTER TABLE
    ADD myCol int NOT NULL

Ответ 3

SQL Server (и любые другие РСУБД, действительно) не имеет понятия "порядок столбцов" - например, если вы перемещаете столбцы, единственным способом достижения этой новой структуры таблицы является выпуск нового оператора CREATE TABLE. Вы не можете упорядочить свои столбцы каким-либо другим способом - и не должны, так как в теории реляций порядок столбцов в кортеже не имеет значения.

Итак, единственное, что может сделать SQL Server Management Studio (и все это сделано):

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

Единственный способ обойти это:

  • не переупорядочивать любые столбцы - добавлять только новые столбцы в конце таблицы
  • используйте ALTER TABLE операторы SQL вместо интерактивного конструктора таблиц для вашей работы.

Ответ 4

Когда вы редактируете определение таблицы в дизайнере, вы говорите "вот, что я хочу, чтобы таблица выглядела так, а теперь выработайте, какие SQL-предложения выдавать, чтобы мои желания сбылись". Это отлично работает для простых изменений, но программное обеспечение не может читать ваши мысли, и иногда оно будет пытаться сделать вещи более сложным способом для безопасности.

Когда это произойдет, я предлагаю, чтобы вместо простого нажатия кнопки "ОК" нажмите кнопку "Script" в верхней части диалогового окна и позвольте ему сгенерировать операторы SQL в окне запроса. Затем вы можете редактировать и упрощать сгенерированный код перед его выполнением.

Ответ 5

В SSMS 2008 R2 есть ошибки (и более старые), которые могут быть полезны:

  • когда данные таблицы изменены, рендеринг ерушк в SSMS автоматически обновляется SSMS на уже открытых вкладках (окнах) - нужно нажать Ctrl + R для обновления. Параметры принудительного обновления не отображаются в графическом интерфейсе SSMS - с помощью кнопок, меню или контекстно-зависимых параметров (при щелчке правой кнопкой мыши)
  • когда изменяется (таблица или база данных) схема, например добавление/удаление/удаление столбца в таблице, SSMS не отражает эти изменения в уже открытых вкладках (окнах) даже через Ctrl + R, следует закрыть и снова открыть вкладки (окна)

Я сообщил об этом несколько лет назад через обратную связь Microsoft Connect, но ошибки были закрыты из-за того, что это "по дизайну"

Обновление:
Это странно и раздражает видеть в настольном продукте, разработанном в течение двух десятилетий, в то время как это (автоматическое восстановление) выполняется большинством веб-приложений в любом браузере.