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

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

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

5 ответов


"Prevent saving changes that require table re-creation"

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

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


потому что так делает SQL Server Management Studio (иногда)!

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

ALTER TABLE
    ADD myCol int NOT NULL

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

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

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

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

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

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

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


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

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

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

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