2012-01-12 123 views
110

我試圖將255個字符的varchar列的長度更新爲500,而不會丟失內容。我之前已經刪除並重新創建了表,但是我從未接觸過alter語句,這是我相信我需要用來做這件事的。我在這裏找到了文檔:ALTER TABLE (Transfact-SQL)但是我無法制作它的正面或反面。更改varchar列的最大長度?

我有以下爲止(基本上就沒什麼遺憾的是):

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

怎樣運用呢?這裏有更好的文檔說明嗎(我做了一些搜索示例語句,但空了)?

回答

212

你需要

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

但要記住,如果需要明確指定NOT NULL

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

如果你離開它未具體說明如下......

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500); 

則列將默認爲允許,即使它最初被定義爲NOT NULL空值。即省略ALTER TABLE ... ALTER COLUMN中的規範始終被視爲。

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

此行爲是與用於與ALTER TABLE(或在CREATE TABLE時間)創建的新列不同。默認的可空性取決於ANSI_NULL_DFLT設置。

+0

你能解釋一下添加的目的「[NOT] NULL」在這裏?只是好奇,爲什麼你的答案有這個米奇的不是? – Codingo 2012-01-12 01:40:16

+0

@MitchWheat - [「ANSI_NULL默認值始終爲ALTER COLUMN;如果未指定,列可以爲空。」](http://msdn.microsoft.com/en-us/library/ms190273.aspx) – 2012-01-12 01:44:40

+0

因此[ NOT NULL]指定NULL值 - 不能放在列中? – Codingo 2012-01-12 02:00:39

16

增加柱尺寸與ALTER不會丟失任何數據:

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

正如@馬丁指出,記得要明確指定NULL | NOT NULL