Ответ 1
Пока типы данных несколько "связаны" - да, вы можете это сделать абсолютно.
Вы можете изменить INT
на BIGINT
- диапазон значений второго типа больше, поэтому вам не грозит "потерять" любые данные.
Вы можете изменить VARCHAR(50)
на VARCHAR(200)
- снова, типы совместимы, размер становится все больше - нет риска усечения чего-либо.
В принципе, вам просто нужно
ALTER TABLE dbo.YourTable
ALTER COLUMN YourColumn VARCHAR(200) NULL
или что угодно. До тех пор, пока у вас нет строки длиннее 200 символов, все будет в порядке. Не уверен, что произойдет, если у вас есть более длинные строки - либо преобразование завершится с ошибкой, либо оно будет продолжено и сообщит вам, что некоторые данные могут быть усечены. Поэтому я предлагаю вам сначала попробовать это с копией ваших данных: -)
Это немного сложнее, если вам нужно изменить VARCHAR
на INT
или что-то в этом роде - очевидно, если у вас есть значения столбцов, которые не "вписываются" в новый тип, преобразование не удастся, Но даже использование отдельного "временного" нового столбца не будет исправлять это - вам нужно как-то разобраться с этими "несовместимыми" случаями (игнорировать их, оставить там NULL, установить их по умолчанию - что-то).
Кроме того, переход между VARCHAR
и NVARCHAR
может оказаться сложным, если у вас есть, например, не западные европейские символы - вы можете потерять определенные записи при конверсии, поскольку они не могут быть представлены в другом формате, или преобразование по умолчанию из одного типа в другое не работает должным образом.