Могут ли быть проблемы при увеличении размера столбца VARCHAR на большой таблице? - PullRequest
82 голосов
/ 22 сентября 2011

Я использую SQL Server 2008, и мне нужно увеличить поле VARCHAR, от (200 до 1200) в таблице с примерно 500 тыс. Строк.Мне нужно знать, есть ли какие-то проблемы, которые я не рассматривал.

Я буду использовать этот оператор TSQL:

ALTER TABLE MyTable
ALTER COLUMN [MyColumn] VARCHAR(1200)

Я уже пробовал это на копии данных, и это утверждение не имело вредных последствий, которые я мог видеть.

Так есть ли какие-либо возможные проблемы с этим, которые я, возможно, не рассмотрел?

Кстати, столбец не индексируется.

Ответы [ 5 ]

56 голосов
/ 22 сентября 2011

Это только изменение метаданных: это быстро.

Замечание: укажите NULL или NOT NULL в явном виде, чтобы избежать «аварий», если одна из настроек SET ANSI_xx отличается, например, запуск по osql, а не SSMS по какой-то причине

10 голосов
/ 06 декабря 2016

Просто хотел добавить свои 2 цента, так как я гуглил этот вопрос, потому что я попал в похожую ситуацию ...

BE AWARE , что при изменении с varchar(xxx) на varchar(yyy) действительно изменение метаданных, но при изменении на varchar(max) это не так. Потому что varchar(max) значения (то есть значения BLOB - изображения / текст и т. Д.) Хранятся по-разному на диске, не внутри строки таблицы, а "вне строки". Таким образом, сервер сойдет с ума на большом столе и перестанет отвечать на запросы в течение нескольких минут (часов).

--no downtime
ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(1200)

--huge downtime
ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(max)

PS. То же относится и к nvarchar или к курсу.

4 голосов
/ 22 сентября 2011

Переход на Varchar (1200) с Varchar (200) не должен вызывать никаких проблем, поскольку это только изменение метаданных, а поскольку SQL Server 2008 усекает чрезмерные пробелы, вы также не должны видеть различий в производительности, так что в общем, проблем не должно быть с внесением изменений.

0 голосов
/ 04 мая 2018

Другая причина, по которой вам следует избегать преобразования столбца в varchar (max), заключается в том, что вы не можете создать индекс для столбца varchar (max).

0 голосов
/ 27 ноября 2014

В моем случае alter column не работала, поэтому можно использовать команду «Изменить», например:

alter table [table_name] MODIFY column [column_name] varchar (1200);

...