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


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

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

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

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

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

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

5 81

5 ответов:

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

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

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

БУДЬТЕ В КУРСЕ что при изменении от varchar(xxx) to varchar(yyy) это изменение метаданных действительно, но меняется на varchar(max) нет. Потому что varchar(max) значения (aka BLOB values-image / text etc) хранятся по-разному на диске, а не в строке таблицы, но "вне строки". Таким образом, сервер сойдет с ума на большой стол и перестанет отвечать на запросы минуты (часы).

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

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

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

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

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

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

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