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

При увеличении размера столбца VARCHAR на большой таблице могут возникнуть проблемы?

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

Просто хотел добавить свои 2 цента, так как я googled этот вопрос b/c, я оказался в подобной ситуации...

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

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

alter table [table_name] MODIFY column [имя_столбца] varchar (1200);