Подтвердить что ты не робот

Varchar (255) в Varchar (MAX)

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

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

Спасибо

4b9b3361

Ответ 1

Вы можете сделать это с помощью TSQL.

Что-то вроде

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

Ответ 2

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

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

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

alt text

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

Ответ 3

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

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

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

Мартин Смит answare:

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

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