Изменение ширины столбца

39

Будет ли увеличение ширины столбца (nvarchar) обязательно отбрасывать таблицу?

Другими словами, можно ли изменить ширину в производственной среде с активными пользователями?

Я подумал, что если размер увеличивается (а не уменьшается), это не будет проблемой.

Фернандо
источник

Ответы:

52

Если вы делаете это с помощью оператора T-SQL, например, приведенного ниже, то удаление таблицы не произойдет, и вы можете безопасно сделать это в производственной среде:

alter table <table> alter column <column> nvarchar(biggernumber) [not] null

Если вы сделаете это через графический интерфейс таблицы разработки SSMS, это будет зависеть от того, какой сценарий он решит использовать для реализации изменения. Иногда он вставляет данные во временную таблицу, удаляет исходную таблицу, создает новую версию этой таблицы и вставляет ее обратно в новую. Самый простой способ узнать, что он будет делать, - нажать кнопку «Создать сценарий» и посмотреть на T-SQL, который он планирует выполнить.

Дерек Кромм
источник
1
Я думал, что даже кнопка «Создать сценарий» выдает предупреждение о том, что вы собираетесь сбросить таблицу, прежде чем даже показать вам сценарий.
Ник Чаммас
1
Он выдает ошибку, но на самом деле не запускает скрипт, пока вы не нажмете OK (или запустите или что-то еще) в окне со скриптом. Вы можете скопировать скрипт и отменить окно, которое показывает вам скрипт.
Мрденни
но работает ли он, скажем, на изменение с плавающей запятой на десятичную (n, n)?
Нишант Шаан
Как это влияет, если таблица реплицируется? Я предполагаю, что таблицы подписчиков не будут обновляться автоматически?
tmwoods
18

Увеличение ширины nvarcharстолбца столбца не потребует удаления таблицы. Ни одна ALTER TABLEоперация не будет . Подробнее об ограничениях при изменении свойств таблицы или столбца вы можете прочитать в инструкции ALTER TABLE .

Я скопировал наиболее важные части из документации ниже:

Изменение размера столбца

Вы можете изменить длину, точность или масштаб столбца, указав новый размер для типа данных столбца в предложении ALTER COLUMN. Если в столбце есть данные, новый размер не может быть меньше максимального размера данных. Кроме того, столбец не может быть определен в индексе, если столбец не относится к типу данных varchar, nvarchar или varbinary и индекс не является результатом ограничения PRIMARY KEY. Смотрите пример П.

Замки и ALTER TABLE

Изменения, указанные в ALTER TABLE, применяются немедленно. Если изменения требуют изменения строк в таблице, ALTER TABLE обновляет строки. ALTER TABLE получает блокировку изменения схемы для таблицы, чтобы убедиться, что никакие другие соединения не ссылаются даже на метаданные таблицы во время изменения, кроме операций с индексами в режиме онлайн, которые требуют очень короткой блокировки SCH-M в конце. В операции ALTER TABLE… SWITCH блокировка получается как для исходной, так и для целевой таблиц. Изменения, внесенные в таблицу, регистрируются и полностью восстанавливаются. Изменения, затрагивающие все строки в очень больших таблицах, такие как удаление столбца или добавление столбца NOT NULL со значением по умолчанию, могут занять много времени и создать много записей журнала. Эти операторы ALTER TABLE должны выполняться с той же тщательностью, что и любые операторы INSERT, UPDATE,

MicSim
источник
Также отличный ответ. Но я мог выбрать только один. Благодарность!
Фернандо