Bir varchar sütununun maksimum uzunluğu değiştiriliyor mu?


188

İçeriğini kaybetmeden 255 karakterden bir varchar sütun uzunluğunu güncellemeye çalışıyorum. Daha önce tabloları bıraktım ve yeniden oluşturdum ama alter deyimine maruz kalmadım ki bunu yapmak için kullanmam gerektiğine inanıyorum. Belgeleri burada buldum: ALTER TABLE (Transfact-SQL) ancak başlarını veya kuyruklarını yapamıyorum.

Şimdiye kadar aşağıdakilere sahibim (ne yazık ki hiçbir şey):

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

Buna nasıl yaklaşırım? Orada bu ifade için daha iyi belgeler var mı (Ben bir örnek ifade için bazı aramalar yaptım ama boş geldi)?

Yanıtlar:


362

İhtiyacın var

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

Ancak NOT NULListenirse açıkça belirtmeyi unutmayın .

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

Aşağıdaki gibi belirtilmemiş bırakırsanız ...

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500);

Ardından, sütun başlangıçta olarak tanımlanmış olsa bile null değerlerine izin verecek şekilde varsayılan olacaktır NOT NULL. yani, bir spesifikasyondaki spesifikasyonun çıkarılması ALTER TABLE ... ALTER COLUMNher zaman olarak kabul edilir.

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

Bu davranış, ALTER TABLE(veya CREATE TABLEzamanda) ile oluşturulan yeni sütunlar için kullanılan davranıştan farklıdır . Burada varsayılan güvenlik açıkları ANSI_NULL_DFLTayarlara bağlıdır .


Buraya '[NOT] NULL' eklemenin amacını açıklayabilir misiniz? Cevabınızın neden bir Mitch'in sahip olmadığını merak ediyor musunuz?
Michael A


Yani [NOT NULL] NULL değerlerin -cannot- sütuna yerleştirileceğini belirtir?
Michael A

3
@Michael - Köşeli parantez olmadan, evet. Köşeli ayraçlar, sözdizimi bitinin isteğe bağlı olduğunu belirtir. Bunu atlarsanız, izin vermek NULLvarsayılan değerdir .
Martin Smith

1
sıralanmış :) .. ALTER COLUMN MY_COL SET VERİ TİPİ VARCHAR (100)
Kdean571

26

İle sütun boyutunu artırmak ALTERhiçbir veri kaybetmez:

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

@ Martin'in belirttiği gibi, açıkça belirtmeyi unutmayın NULL | NOT NULL


14

Şunları kullanabilirsiniz modify:

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

4
Bu zaten yayınlanmıştı. Paylaşmak istediğiniz yeni bir şey var mı?
Nico Haase

Ayrıca MySQL için çalışıyor ve bu soru [TSQL] olarak etiketlendi, bu yüzden yanlış yerde
jean

6
DEĞİŞTİR yenilik budur. ALTER COLUMN bana bir sözdizimi hatası verdi, ancak COLUMN DEĞİŞTİR benim için sorunsuz çalıştı.
KGBird

@KGBird - çünkü SQL Server kullanmıyorsunuz. MODIFYsorusundan başka bir veritabanı sistemi için sözdizimi
Martin Smith

1

IntelliJ içindeki Maria-DB ve DB-Navigator aracını kullanarak, DEĞİŞTİR Sütunu Değiştir sütun yerine benim için çalıştı


2
Bu yazı @Mitch Wheat tarafından 12 Ocak 12: 01'de verilen cevaba yeni ne ekliyor?
scopchanov

1
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME VARCHAR(40);

Soruya geç - ama ben Oracle SQL Developer kullanıyorum ve @ anonim cevap en yakın oldu ama ben bu sorguyu düzenledi kadar sözdizimi hataları almaya devam etti.

Umarım bu birine yardımcı olur


(değiştirilecek değişiklik değiştirildi ve sütun_adı sütun olarak tanımlanmasına gerek yok)
Jett

0

Ayrıca şüphe duyuyordum, benim için işe yarayan şey

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

0

Bu benim için çalıştı db2:

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

0

Alternatif olarak, eski verileri kaydedebilir ve yeni parametrelerle yeni bir tablo oluşturabilirsiniz.

resme bak

SQL Server Management Studio'da: "veritabanınız" => görev => generatescripts => belirli bir veritabanı nesnesini seçin => "tablonuz" => gelişmiş => kodlanacak veri türleri - şema ve veri => oluşturmak

Şahsen ben yaptım.


-1

MariaDB için değiştir sütununu kullanın :

ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR (500);

Çalışacak.


Soru SQL sunucusu hakkında
Martin Smith
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.