Ответ 1
Это изменение только метаданных: оно быстро.
Наблюдение: укажите NULL или NOT NULL явно, чтобы избежать "несчастных случаев", если одна из настроек SET ANSI_xx различна, например, запустите в osql не SSMS по какой-либо причине
Я использую SQL Server 2008, и мне нужно сделать поле VARCHAR больше, от (200 до 1200) на столе с примерно 500 тыс. строк. Мне нужно знать, есть ли какие-то проблемы, которые я не рассматривал.
Я буду использовать этот оператор TSQL:
ALTER TABLE MyTable
ALTER COLUMN [MyColumn] VARCHAR(1200)
Я уже пробовал это на копии данных, и это утверждение не имело никаких негативных последствий, которые я мог видеть.
Так могут ли возникнуть какие-то возможные проблемы, которые я, возможно, не рассматривал?
Кстати, столбец не индексируется.
Это изменение только метаданных: оно быстро.
Наблюдение: укажите NULL или NOT NULL явно, чтобы избежать "несчастных случаев", если одна из настроек SET ANSI_xx различна, например, запустите в osql не SSMS по какой-либо причине
Переход на Varchar (1200) из Varchar (200) не должен вызывать никаких проблем, поскольку это только изменение метаданных, и поскольку SQL Server 2008 обрезает лишние пробелы, вы не должны видеть различий в производительности, так что вкратце не должно быть проблем с внесением изменений.
Просто хотел добавить свои 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
или курсу.
В моем случае alter column не работал, поэтому можно использовать команду "Изменить", например:
alter table [table_name] MODIFY column [имя_столбца] varchar (1200);