Изменить длину varchar на живом столе

25

У меня есть сервер БД MS SQL Server 2008 R2, который в настоящее время используется с производственным приложением.

Новое усовершенствование приложения теперь требует varchar(100)увеличения длины столбца в таблице.

Можно ли увеличить длину этого существующего столбца в базе данных prod, не влияя на текущие данные?

Обязательно ли вносить это изменение в нерабочее время, чтобы избежать перерыва в обслуживании?

anataliocs
источник

Ответы:

42

Если вы увеличиваете его до varchar(100 - 8000)(т. Е. Что- либо кроме varchar(max)) и делаете это через TSQL, а не через графический интерфейс SSMS

ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL

и не изменяя колонки допустимости пустых от NULLдо NOT NULL(который будет блокировать таблицу , а все строки проверяются и потенциально записываются ) или NOT NULLв NULL некоторых случаях , то это быстро метаданные только изменение. Возможно, придется подождать SCH-Mблокировки на столе, но как только он получит, что изменение будет в значительной степени мгновенным.

Следует помнить, что во время ожидания SCH-Mблокировки другие запросы будут блокироваться, а не перемещаться по очереди перед ним, поэтому вы можете рассмотреть возможность добавления SET LOCK_TIMEOUTпервого.

Также убедитесь, что в ALTER TABLEоператоре вы явно указываете NOT NULL, является ли это исходным состоянием столбца, иначе столбец будет изменен для разрешения NULL.

Мартин Смит
источник
Спасибо за быстрый ответ, просто проверял. Это было почти мгновенно.
anataliocs