Ответ 1
Вы можете сделать это с помощью TSQL.
Что-то вроде
ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX)
Можно ли изменить тип столбца в базе данных SQL Server 2008 с varchar(255)
до varchar(MAX)
без необходимости отбрасывать таблицу и воссоздавать?
SQL Server Management Studio бросает мне ошибку каждый раз, когда я пытаюсь сделать это, используя это - но чтобы сохранить себе головную боль, было бы неплохо узнать, могу ли я изменить тип без необходимости DROP и CREATE.
Спасибо
Вы можете сделать это с помощью TSQL.
Что-то вроде
ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX)
"Сохранение изменений не разрешено. Внесенные вами изменения требуют удаления и повторного создания следующих таблиц. Вы внесли изменения в таблицу, которую нельзя создать заново, или включили параметр "Запретить сохранение изменений, для которых требуется повторное создание таблицы". Опция "Запретить сохранение изменений" не включена.
Это новая "функция" в SQL Server Management Studio 2008, которая по умолчанию включена. Всякий раз, когда вы вносите большее изменение, SSMS может воссоздать таблицу, только создав новую, а затем переместившись на данные из старой - все в фоновом режиме (эти изменения включают в себя переупорядочение ваших столбцов среди прочего).
Эта опция по умолчанию отключена, так как если ваша таблица имеет ограничения FK и прочее, этот способ повторного выполнения таблицы может завершиться неудачей. Но вы определенно можете включить эту функцию!
Он находится в Tools > Options
и после того, как вы снимите этот флажок, вы снова сможете вносить подобные изменения в структуру таблицы в конструкторе таблиц.
Знать
с чем-то вроде
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
.