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

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.


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


14

Sie können verwenden modify:

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

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


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


(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;  

0

Das hat bei mir in db2 funktioniert:

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

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.


-1

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

ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR (500);

Es wird klappen.


Die Frage
Martin Smith
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.