2012-01-12 9 views
110

İçeriği kaybetmeden 255 karakterden 500 bir varchar sütununun uzunluğunu güncellemeye çalışıyorum. Daha önce masaları düşürdüm ve yeniden oluşturdum ama asla bunu yapmak için kullanmam gerektiğine inandığım alter ifadesine maruz kalmamıştım. Buradaki belgeleri buldum: ALTER TABLE (Transfact-SQL) Ancak başlarını veya kuyruklarını yapamam.Bir varchar sütununun maksimum uzunluğunu değiştirmek mi istiyorsunuz?

aşağıdaki bugüne kadar (maalesef esasen hiçbir şey) var: Ben bu yaklaşım nasıl

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

? Orada bu açıklama için daha iyi belgeler var mı? (Örnek bir açıklama için bazı aramalar yaptım ama boş çıktım)?

cevap

212

Sen

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

ihtiyaç Ama istenirse açıkça NOT NULL belirtmek unutmayın.

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500); 

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

bunu belirtilmemiş aşağıda bırakırsanız

... Sonra kolon başlangıçta NOT NULL olarak tanımlandı bile boş değerlere izin değerlerini kullanacaktır. Yani, bir ALTER TABLE ... ALTER COLUMN belgesindeki belirtimi ihmal etmek her zaman olarak kabul edilir.

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

Bu davranış ALTER TABLE (veya CREATE TABLE anda) ile oluşturulan yeni sütunlar için kullanılandan farklıdır. Orada varsayılan null% ANSI_NULL_DFLT ayarlarına bağlıdır.

+0

sen katma hedefi açıklayabilir misiniz burada '[DEĞİL] NULL' belirlendiğini hatırlayın ? Sadece cevabın neden bir Mitch'in yapmamış olduğunu merak ettin mi? – Codingo

+0

@MitchWheat - ["ANSI_NULL varsayılanları ALTER COLUMN için her zaman açıktır; belirtilmezse sütun null."] (Http://msdn.microsoft.com/en-us/library/ms190273.aspx) –

+0

So NULL], NULL değerlerinin - sütunlara - yerleştirilemediğini belirtir? – Codingo

16

herhangi bir veri kaybetmezsiniz ALTER ile kolon boyutunun artırılması:

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

@Martin belirttiği üzere, açıkça NULL | NOT NULL