Zmieniasz maksymalną długość kolumny varchar?


188

Próbuję zaktualizować długość kolumny varchar z 255 znaków na 500 bez utraty zawartości. Upuściłem i ponownie utworzyłem tabele wcześniej, ale nigdy nie byłem narażony na instrukcję alter, która moim zdaniem powinienem to zrobić. Znalazłem dokumentację tutaj: ALTER TABLE (Transfact-SQL), ale nie mogę robić z niej głów ani ogonów.

Do tej pory mam następujące (w zasadzie nic niestety):

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

Jak do tego podejść? Czy istnieje lepsza dokumentacja dla tego oświadczenia (szukałem przykładowego oświadczenia, ale okazało się, że jest puste)?

Odpowiedzi:


362

Potrzebujesz

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

Pamiętaj jednak, aby NOT NULLwyraźnie określić, jeśli chcesz.

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

Jeśli pozostawisz to nieokreślone jak poniżej ...

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500);

Wtedy kolumna domyślnie zezwoli na wartości null, nawet jeśli pierwotnie została zdefiniowana jako NOT NULL. tzn. pominięcie specyfikacji w ALTER TABLE ... ALTER COLUMNjest zawsze traktowane jako.

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

To zachowanie jest inne niż stosowane w przypadku nowych kolumn utworzonych za pomocą ALTER TABLE(lub w danym CREATE TABLEmomencie). Tam domyślna zerowalność zależy od ANSI_NULL_DFLTustawień.


Czy mógłbyś wyjaśnić tutaj cel dodania „[NOT] NULL”? Ciekawe, dlaczego Twoja odpowiedź brzmiała tak, jak Mitch?
Michael A


Zatem [NOT NULL] określa, że ​​wartości NULL - nie mogą być umieszczone w kolumnie?
Michael A

3
@ Michael - Bez nawiasów kwadratowych, tak. Nawiasy kwadratowe wskazują, że bit składni jest opcjonalny. Jeśli pominiesz to zezwolenie NULLjest domyślne.
Martin Smith

1
posortowałem to :) .. ZMIEŃ KOLUMNĘ MY_COL ZESTAW DANYCH TYP VARCHAR (100)
Kdean571

26

Zwiększenie rozmiaru kolumny za pomocą ALTERnie spowoduje utraty żadnych danych:

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

Jak wskazuje @Martin, pamiętaj, aby wyraźnie to określić NULL | NOT NULL


14

Możesz użyć modify:

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

4
To już zostało opublikowane. Czy jest coś nowego, czym chciałbyś się podzielić?
Nico Haase

Działa również dla MySQL, a to pytanie jest oznaczone [TSQL], więc jest w niewłaściwym miejscu
Jean

6
MODIFY jest nowością. ALTER COLUMN dał mi błąd składniowy, ale MODIFY COLUMN działał dla mnie bez problemów.
KGBird

@KGBird - ponieważ nie używasz programu SQL Server. MODIFYjest składnią dla innego systemu baz danych niż pytanie
Martin Smith

1

Korzystając z Maria-DB i DB-Navigator w IntelliJ, MODIFY Column działało dla mnie zamiast Alter Column


2
Co nowego dodaje ten post do odpowiedzi udzielonej przez @Mitch Wheat w dniu 12 stycznia o godz. 1:37?
scopchanov

1
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME VARCHAR(40);

Późno do pytania - ale korzystam z Oracle SQL Developer i odpowiedź @ anonimowa była najbliższa, ale otrzymywałem błędy składniowe, dopóki nie zredagowałem tego zapytania.

Mam nadzieję, że to komuś pomoże


(zmieniono alter, aby zmodyfikować i nie trzeba definiować nazwy kolumny jako kolumny)
Jett

0

Miałem też ponad wszelką wątpliwość, co mi się udało

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

0

To działało dla mnie w db2:

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

0

Alternatywnie możesz zapisać stare dane i utworzyć nową tabelę z nowymi parametrami.

patrz zdjęcie

W SQL Server Management Studio: „twoja baza danych” => zadanie => generuje skrypty => wybierz konkretny obiekt bazy danych => „twoja tabela” => zaawansowane => typy danych do skryptu - schemat i dane => generuj

Osobiście to zrobiłem.


-1

W przypadku MariaDB użyj zmodyfikuj kolumnę :

ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR (500);

To będzie działać.


Pytanie dotyczy serwera SQL
Martin Smith,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.