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)?

Michael A.
źródło

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ń.

Martin Smith
źródło
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

Mitch Pszenica
źródło
14

Możesz użyć modify:

ALTER TABLE `table name` 
modify COLUMN `column name` varchar("length");
anonimowy
źródło
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

Rahul Sharma
źródło
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

Jett
źródło
(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;  
R. Gurung
źródło
0

To działało dla mnie w db2:

alter table "JOBS"  alter column "JOB_TITLE" set  data type varchar(30);
Mukesh
źródło
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.

Vlad
źródło
-1

W przypadku MariaDB użyj zmodyfikuj kolumnę :

ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR (500);

To będzie działać.

hammadshahir
źródło
Pytanie dotyczy serwera SQL
Martin Smith,