Зміна максимальної довжини стовпчика варшара?


188

Я намагаюся оновити довжину стовпчика varchar з 255 символів до 500, не втрачаючи вмісту. Я раніше відкидав та відтворював таблиці, але ніколи не зазнавав змін у заяві alter, що, на мою думку, мені потрібно використовувати для цього. Я знайшов тут документацію: ALTER TABLE (Transfact-SQL), однак я не можу створювати її голови чи хвости.

На сьогодні у мене є таке (фактично нічого, на жаль):

alter table [progennet_dev].PROGEN.LE
alter column UR_VALUE_3

Як я підходжу до цього? Чи є краща документація для цього твердження там (я кілька пошукав приклад заяви, але з'явився порожнім)?

Відповіді:


362

Тобі потрібно

ALTER TABLE YourTable ALTER COLUMN YourColumn <<new_datatype>> [NULL | NOT NULL]

Але не забудьте вказати NOT NULLчітко за бажанням.

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500) NOT NULL;

Якщо ви залишите це не вказано, як зазначено нижче ...

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500);

Тоді стовпець за замовчуванням дозволить дозволити нулі, навіть якщо він був спочатку визначений як NOT NULL. тобто опускання специфікації в а ALTER TABLE ... ALTER COLUMNзавжди трактується як.

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500) NULL;

Така поведінка відрізняється від такої, що використовується для нових стовпців, створених ALTER TABLE(або під CREATE TABLEчас). Там за замовчуванням нульова залежність залежить від ANSI_NULL_DFLTналаштувань.


Чи можете ви пояснити мету додавання сюди "[NOT] NULL"? Просто цікаво, чому у вашій відповіді це не було Мітча?
Майкл А


Отже, [NOT NULL] вказує, що значення NULL -неможливо розмістити у стовпці?
Майкл А

3
@Michael - Без квадратних дужок, так. Квадратні дужки вказують, що біт синтаксису не є обов'язковим. Якщо ви пропустите це дозвіл NULL- це за замовчуванням.
Мартін Сміт

1
сортував його :) .. ПІДКЛЮЧИТИ КОЛІЙ MY_COL НАЗАД ДАНИХ ТИП ВАРХАР (100)
Kdean571

26

Збільшення розміру стовпця за допомогою даних ALTERне втратить:

alter table [progennet_dev].PROGEN.LE 
    alter column UR_VALUE_3 varchar(500) 

Як зазначає @Martin, не забудьте чітко вказати NULL | NOT NULL


14

Ви можете використовувати modify:

ALTER TABLE `table name` 
modify COLUMN `column name` varchar("length");

4
Ось що вже було розміщено. Ви хочете поділитися чимось новим?
Ніко Хааз

Крім того, він працює для MySQL і позначено це питання [TSQL] , так що це НЕ в тому місці
жан

6
MODIFY - це те, що нового. ALTER COLUMN видав мені синтаксичну помилку, але MODIFY COLUMN працював на мене без проблем.
КДБірд

@KGBird - тому що ви не використовуєте SQL Server. MODIFYє синтаксисом для якоїсь іншої системи баз даних, ніж питання, про яке йшлося
Мартін Сміт

1

Використовуючи Maria-DB та DB-Navigator інструмент всередині IntelliJ, стовпчик MODIFY працював для мене замість Alter Column


2
Що нового додає цей пост до відповіді, наданої @Mitch Wheat 12 січня 12.12 о 13:37?
скопчанов

1
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME VARCHAR(40);

Пізно до питання - але я використовую розробник Oracle SQL і відповідь @ anonymous була найближчою, але я постійно отримував помилки синтаксису, поки я не відредагував запит на це.

Сподіваюся, що це комусь допоможе


(змінили alter, щоб змінити, і не потрібно визначати ім'я колонки як стовпець)
Jett

0

У мене також були сумніви, що для мене працює

ALTER TABLE `your_table` CHANGE `property` `property` 
VARCHAR(whatever_you_want) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;  

0

Це працювало для мене в db2:

alter table "JOBS"  alter column "JOB_TITLE" set  data type varchar(30);

0

Як альтернатива, ви можете зберегти старі дані та створити нову таблицю з новими параметрами.

дивіться зображення

У студії управління SQL Server: "ваша база даних" => завдання => генерує сценарії => виберіть конкретний об'єкт бази даних => "ваша таблиця" => розширені => типи даних для скрипту - схема і дані => генерувати

Особисто я це зробив.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.