Ändern der maximalen Länge einer Varchar-Spalte?

188

Ich versuche, die Länge einer Varchar-Spalte von 255 Zeichen auf 500 zu aktualisieren, ohne den Inhalt zu verlieren. Ich habe zuvor Tabellen gelöscht und neu erstellt, war aber noch nie der alter-Anweisung ausgesetzt, die ich meiner Meinung nach dazu verwenden muss. Ich habe die Dokumentation hier gefunden: ALTER TABLE (Transfact-SQL), aber ich kann weder Kopf noch Zahl daraus machen.

Ich habe bisher folgendes (im Wesentlichen leider leider nichts):

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

Wie gehe ich das an? Gibt es da draußen eine bessere Dokumentation für diese Aussage (ich habe nach einer Beispielaussage gesucht, bin aber leer ausgefallen)?

Michael A.
quelle

Antworten:

361

Du brauchst

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

Denken Sie jedoch daran, auf NOT NULLWunsch explizit anzugeben .

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

Wenn Sie es wie unten angegeben nicht spezifizieren ...

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500);

Dann lässt die Spalte standardmäßig Nullen zu, selbst wenn sie ursprünglich als definiert wurde NOT NULL. dh das Weglassen der Spezifikation in a ALTER TABLE ... ALTER COLUMNwird immer als behandelt.

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

Dieses Verhalten unterscheidet sich von dem für neue Spalten, die mit ALTER TABLE(oder zur CREATE TABLEZeit) erstellt wurden. Dort hängt die Standardnullbarkeit von den ANSI_NULL_DFLTEinstellungen ab.

Martin Smith
quelle
Können Sie hier den Zweck des Hinzufügens von '[NOT] NULL' erläutern? Nur neugierig, warum Ihre Antwort dies hatte und Mitch nicht?
Michael A
Also gibt [NOT NULL] an, dass NULL-Werte - nicht - in die Spalte eingefügt werden können?
Michael A
3
@ Michael - Ohne die eckigen Klammern ja. Die eckigen Klammern geben an, dass das Syntaxbit optional ist. Wenn Sie es weglassen, NULList das Zulassen die Standardeinstellung.
Martin Smith
1
sortiert es :) .. ALTER COLUMN MY_COL SET DATA TYPE VARCHAR (100)
Kdean571
26

Wenn Sie die Spaltengröße mit ALTERerhöhen, gehen keine Daten verloren:

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

Denken Sie daran, wie @Martin betont, explizit anzugeben NULL | NOT NULL

Mitch Wheat
quelle
14

Sie können verwenden modify:

ALTER TABLE `table name` 
modify COLUMN `column name` varchar("length");
anonym
quelle
4
Das wurde schon gepostet. Gibt es etwas Neues, das Sie teilen möchten?
Nico Haase
Es funktioniert auch für MySQL und diese Frage ist mit [TSQL] markiert, so dass sie am falschen Ort ist
Jean
6
MODIFY ist das Neue. ALTER COLUMN gab mir einen Syntaxfehler, aber MODIFY COLUMN funktionierte für mich ohne Probleme.
KGBird
@KGBird - weil Sie SQL Server nicht verwenden. MODIFYist die Syntax für ein anderes Datenbanksystem als die Frage
Martin Smith
1

Mit dem Maria-DB- und DB-Navigator-Tool in IntelliJ funktionierte MODIFY Column für mich anstelle von Alter Column

Rahul Sharma
quelle
2
Was Neues fügt dieser Beitrag der Antwort von @Mitch Wheat am 12. Januar 12 um 1:37 hinzu?
Scopchanov
1
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME VARCHAR(40);

Spät zur Frage - aber ich benutze Oracle SQL Developer und die Antwort von @ anonym war die nächste, erhielt aber weiterhin Syntaxfehler, bis ich die Abfrage dazu bearbeitet habe.

Hoffe das hilft jemandem

Jedo
quelle
(geändert ändern, um zu ändern und keine Notwendigkeit, Spaltenname als Spalte zu definieren)
Jedo
0

Ich hatte auch zweifelsohne das, was für mich funktioniert hat

ALTER TABLE `your_table` CHANGE `property` `property` 
VARCHAR(whatever_you_want) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;  
R. Gurung
quelle
0

Das hat bei mir in db2 funktioniert:

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

Alternativ können Sie alte Daten speichern und eine neue Tabelle mit neuen Parametern erstellen.

siehe Bild

In SQL Server Management Studio: "Ihre Datenbank" => Aufgabe => generiert Skripte => wählen Sie ein bestimmtes Datenbankobjekt aus => "Ihre Tabelle" => erweiterte => zu skriptierende Datentypen - Schema und Daten => generieren

Persönlich habe ich das getan.

vlad
quelle
-1

Verwenden Sie für MariaDB die Spalte "Ändern" :

ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR (500);

Es wird klappen.

hammadshahir
quelle
Die Frage
Martin Smith