Заставить Management Studio использовать ALTER TABLE вместо DROP / CREATE - PullRequest
12 голосов
/ 12 марта 2010

Мне интересно, есть ли способ заставить MSSQL Management Studio создать такой скрипт:

ALTER TABLE Mytable
ADD MyCol bit NOT NULL
CONSTRAINT MyColDefault
DEFAULT 0 WITH VALUES


ALTER TABLE [dbo].Mytable
ALTER COLUMN MyCol2 int NULL

GO 

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

Есть ли возможность изменить это поведение? Или это может быть возможно, есть ли какая-то опасность, которую я не вижу при использовании простого ALTER TABLE выше?

спасибо.

Ответы [ 3 ]

8 голосов
/ 12 марта 2010

Да, вы можете!

В SQL Server Management Studio перейдите в режим конструирования таблицы для рассматриваемой таблицы и внесите изменения. Однако: не нажмите кнопку «Сохранить», а вместо этого щелкните правой кнопкой мыши в представлении дизайна таблицы, в конце контекстного меню должен быть пункт «Создать сценарий изменения».

alt text

Нажмите на этот пункт меню, и вы увидите всплывающее диалоговое окно, которое содержит скрипт T-SQL, необходимый для внесения тех изменений, которые вы внесли в таблицу в конструкторе. Скопируйте или сохраните этот код T-SQL и отмените его из конструктора, и вуаля - у вас есть скрипт изменения!

ОБНОВЛЕНИЕ: Марко, извините, я не думаю, что есть какой-либо вариант изменить поведение по умолчанию, по крайней мере, сейчас. Возможно, вы захотите подать запрос на расширение в Microsoft на Microsoft Connect, чтобы предложить это - хорошая идея, я думаю!

5 голосов
/ 12 марта 2010

Вы не можете изменить поведение, просто сценарий по умолчанию, который он создает, не всегда самый эффективный. Он создает сценарии в формате, который знает, что будет работать, хотя часто результаты будут медленными и ресурсоемкими. Я рекомендую вам привыкнуть к созданию сценария для всех изменений самостоятельно, так как вы можете лучше его оптимизировать. Нет ничего плохого в том, что вы создали (при условии, что у вас нет существующих ограничений / зависимостей от MyCol2, которые могли бы стать недействительными, если бы он стал обнуляемым int)

0 голосов
/ 13 декабря 2011

легко! просто перейдите на Tool -> Option, затем на узел Designer и выберите Table and Database designer, чтобы вы могли снять флажок Prevent saving changes that require ....

Теперь вы можете вносить любые изменения в дизайн ваших столов!

...