SQL Server Management Studio - добавление/перемещение столбцов требует сброса и повторного создания?
Почему я получаю сообщение о том, что таблица должна удаляться и повторно создаваться при добавлении/перемещении столбцов?
Я считаю, что это происходит после добавления ограничений внешнего ключа.
Что я могу сделать, чтобы добавить новые столбцы, не отбрасывая таблицу?
Ответы
Ответ 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, но ошибки были закрыты из-за того, что это "по дизайну"
Обновление:
Это странно и раздражает видеть в настольном продукте, разработанном в течение двух десятилетий, в то время как это (автоматическое восстановление) выполняется большинством веб-приложений в любом браузере.