更改varchar列的最大长度?


188

我正在尝试将varchar列的长度从255个字符更新为500个而不丢失内容。我之前删除并重新创建过表,但是我从未接触过alter语句,这是我认为需要使用的语句。我在这里找到了文档:ALTER TABLE(Transfact-SQL),但是我无法做到这一点。

到目前为止,我有以下情况(不幸的是,基本上没有):

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

我该如何处理?是否有更好的文档用于此语句(我对示例语句进行了一些搜索,但结果为空)?

Answers:


362

你需要

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设置。


您能解释一下在此处添加“ [NOT] NULL”的目的吗?只是古玩,为什么你的答案没有米奇呢?
Michael A


因此,[NOT NULL]指定不能将NULL值放置在列中吗?
Michael A

3
@Michael-没有方括号,是的。方括号表示语法的位是可选的。如果省略它,则允许NULL为默认设置。
马丁·史密斯

1
排序它:) .. ALTER COLUMN MY_COL SET DATA TYPE VARCHAR(100)
Kdean571

26

增加的列大小ALTER不会丢失任何数据:

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

正如@Martin指出的,请记住明确指定 NULL | NOT NULL


14

您可以使用modify

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

4
那就是已经发布的内容。您想分享什么新东西吗?
Nico Haase

它也适用于MySQL,这个问题被标记为[TSQL],所以它在错误的位置
吉恩

6
MODIFY是新功能。ALTER COLUMN给了我一个语法错误,但是MODIFY COLUMN对我没有任何问题。
KGBird

@KGBird-因为您没有使用SQL Server。MODIFY是有关问题的其他数据库系统的语法
Martin Smith


1
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME VARCHAR(40);

问题的后期-但是我正在使用Oracle SQL Developer,@ anonymous的回答是最接近的,但是一直收到语法错误,直到我对此查询进行了编辑。

希望这可以帮助某人


(已更改更改,无需修改column_name即可)
Jett

0

我也毫不怀疑,对我有用的是

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

0

这在db2中为我工作:

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

0

或者,您可以保存旧数据并使用新参数创建新表。

看图片

在SQL Server Management Studio中:“您的数据库” =>任务=> generatescripts =>选择特定的数据库对象=>“您的表” =>高级=>要编写脚本的数据类型-架构和数据=>生成

我个人是这样做的。


-1

对于MariaDB,请使用Modify列

ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR (500);

会的。


问题是关于SQL Server的
马丁·史密斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.