Варчар (255) в Варчар (Макс)

Можно ли изменить тип столбца в базе данных SQL Server 2008 с varchar(255) в varchar(MAX) без необходимости бросать стол и воссоздавать?

SQL Server Management Studio выдает сообщение об ошибке каждый раз, когда я пытаюсь сделать это с помощью этого, но, чтобы спасти себя, была бы головная боль, если бы я мог изменить тип без необходимости DROP и CREATE.

Спасибо

3 ответа

Решение

Вы должны быть в состоянии сделать это с помощью TSQL.

Что-то вроде

ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX)

"Сохранение изменений не разрешено. Внесенные вами изменения требуют удаления и повторного создания следующих таблиц. Вы внесли изменения в таблицу, которую невозможно создать заново, или включили параметр "Запретить сохранение изменений, для которых требуется повторное создание таблицы". Опция "Запретить сохранение изменений" не включена.

Это новая "функция" в SQL Server Management Studio 2008, которая по умолчанию включена. Всякий раз, когда вы вносите большее изменение, SSMS может воссоздать таблицу, только создав новую, а затем переместившись на данные из старой - все в фоновом режиме (эти изменения включают в себя переупорядочение ваших столбцов среди прочего).

Эта опция по умолчанию отключена, поскольку, если ваша таблица имеет ограничения FK и прочее, этот способ повторного выполнения таблицы может завершиться неудачно. Но вы определенно можете включить эту функцию!

http://i42.tinypic.com/19pegj.png

Это под Tools > Options и как только вы уберете эту опцию, вы снова сможете вносить подобные изменения в структуру таблицы в конструкторе таблиц.

Знать
с чем-то вроде

ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX)

https://dba.stackexchange.com/questions/15007/change-length-of-varchar-on-live-prod-table

Ответ Мартина Смита:

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

 ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [НЕ] NULL 
и не изменяя обнуляемость столбца от NULL в NOT NULL (который блокировал бы таблицу, пока все строки проверены и потенциально записаны в или из NOT NULL в NULL в некоторых случаях это только быстрое изменение метаданных. Возможно, придется подождать SCH-M блокировка на столе, но как только он приобретет, что изменение будет в значительной степени мгновенным. Следует помнить, что во время ожидания SCH-M заблокировать другие запросы будут заблокированы, а не перескочить очередь перед ним, так что вы можете рассмотреть возможность добавления SET LOCK_TIMEOUT первый. Также убедитесь, что в ALTER TABLE заявление, которое вы явно указываете NOT NULL если это исходное состояние столбца, иначе столбец будет изменен, чтобы NULL,

Другие вопросы по тегам