更改varchar列的最大长度?

250

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

我目前有以下代码(非常遗憾,其实什么也没有):

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

我该如何处理这个问题?是否有更好的文档可以解释这个语句(我已经搜索了一些例子,但都找不到)?


如何处理这个问题?是否有更好的文档来阐述这个语句(我搜索了一些例子但没有结果)?

在Microsoft SQL Server Management Studio中,您还可以右键单击表并选择“设计”以打开设计视图。从这里,您将看到表中每个列的列表,并在其旁边列出每个列的相应数据类型。您可以在此处修改值。但是,请注意,此方法将删除表并重新构建/添加它。 - TylerH
10个回答

481

您需要:

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] 是指该列不能放置 NULL 值,对吗? - Michael A
4
@Michael - 去掉方括号就可以了。方括号表示该语法位可选。如果省略它,则允许NULL是默认值。 - Martin Smith
不得不说,我一直在尝试这个,但仍然遇到错误。错误代码30000,SQL状态42X01:语法错误:在第2行第20列遇到"varchar"。 - DCX
@Kdean571 - 看起来你正在使用Derby,从错误信息来看。这个语法是SQL Server的。 - Martin Smith
3
已排好序 :).. ALTER COLUMN MY_COL SET DATA TYPE VARCHAR(100) 的翻译是:更改列 MY_COL 的数据类型为 VARCHAR(100)。 - DCX
显示剩余2条评论

29

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

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

如@Martin所指出的那样,请记得明确地指定NULL | NOT NULL


28

对于MySQL或其他非MSSQL的DBMS,您可能需要使用modify而不是alter来修改列的值:

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

对于MSSQL:

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

4
已经发布了这个内容。你有什么新的想要分享的吗? - Nico Haase
1
同时它也适用于MySQL,而这个问题标记为[TSQL],因此放错了地方。 - jean
8
MODIFY是新的内容。ALTER COLUMN给我一个语法错误,但MODIFY COLUMN没有任何问题地为我工作。 - KGBird
2
@KGBird - 因为您没有使用SQL Server。MODIFY是某些其他数据库系统的语法,而不是问题所涉及的系统。 - Martin Smith

10
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME VARCHAR(40);

我正在使用Oracle SQL Developer,@anonymous的答案最接近,但是在编辑查询之前一直收到语法错误。我将alter更改为modify,并且不需要将column_name定义为column


3
使用Maria-DB和IntelliJ中的DB-Navigator工具,我使用修改列而不是更改列

2
这篇文章对于 @Mitch Wheat 在 2012年1月12日1:37提供的答案有什么新的补充? - scopchanov

2

在Oracle SQL Developer中

修改表car_details的扭矩列为VARCHAR(100)类型:


1
这只是重复了Jett在2019年8月的答案。 - TylerH

0

我也有同样的疑问,对我有用的是

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

0
作为一种替代方案,您可以保存旧数据并创建一个具有新参数的新表。

see image

在SQL Server Management Studio中:选择“你的数据库” => 任务 => 生成脚本 => 选择特定的数据库对象 => “你的表” => 高级 => 要生成的数据类型 - 模式和数据 => 生成。
就我个人而言,我是这样做的。

0

在db2中,这对我有用:

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

-1

对于MariaDB,使用修改列

ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR (500);

它会起作用的。


3
问题涉及SQL服务器。 - Martin Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接