更改varchar列的最大长度?

Mic*_*l A 177 sql t-sql sql-server varchar sql-server-2008

我正在尝试将varchar列的长度从255个字符更新为500而不会丢失内容.我之前已经删除并重新创建了表格,但我从未接触过alter statement,这是我认为我需要用来做这个的.我在这里找到了文档:ALTER TABLE(Transfact-SQL)但是我无法做出正面或反面.

到目前为止,我有以下内容(基本上没有任何遗憾):

alter table [progennet_dev].PROGEN.LE
alter column UR_VALUE_3
Run Code Online (Sandbox Code Playgroud)

我该如何处理?那里有没有更好的文件说明(我做了一些搜索示例声明但是空了)?

Mar*_*ith 336

你需要

ALTER TABLE YourTable ALTER COLUMN YourColumn <<new_datatype>> [NULL | NOT NULL]
Run Code Online (Sandbox Code Playgroud)

但是请记住NOT NULL如果需要明确指定.

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500) NOT NULL;
Run Code Online (Sandbox Code Playgroud)

如果您未指定如下...

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500);
Run Code Online (Sandbox Code Playgroud)

然后该列将默认允许空值,即使它最初被定义为NOT NULL.即省略a中的规范ALTER TABLE ... ALTER COLUMN始终被视为.

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500) NULL;
Run Code Online (Sandbox Code Playgroud)

此行为与用于ALTER TABLE(或在CREATE TABLE时间)创建的新列的行为不同.默认的可空性取决于ANSI_NULL_DFLT设置.

  • @Michael - 没有方括号,是的.方括号表示语法位是可选的.如果省略它,则允许"NULL"是默认值. (3认同)
  • 排序它:)..ALTER COLUMN MY_COL SET DATA TYPE VARCHAR(100) (3认同)

Mit*_*eat 25

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

alter table [progennet_dev].PROGEN.LE 
    alter column UR_VALUE_3 varchar(500) 
Run Code Online (Sandbox Code Playgroud)

正如@Martin指出的那样,记得明确指出 NULL | NOT NULL


Jed*_*edo 10

ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME VARCHAR(40);
Run Code Online (Sandbox Code Playgroud)

我正在使用Oracle SQL Developer,@anonymous 的答案是最接近的,但一直收到语法错误,直到我将查询编辑为此。我改成altermodify,就不用定义column_name为了column


小智 9

您可以使用modify

ALTER TABLE `table name` 
modify COLUMN `column name` varchar("length");
Run Code Online (Sandbox Code Playgroud)

  • MODIFY是新功能。ALTER COLUMN给了我一个语法错误,但是MODIFY COLUMN对我没有任何问题。 (6认同)
  • 那就是已经发布的内容。您想分享什么新东西吗? (4认同)
  • @KGBird - 因为你没有使用 SQL Server。“MODIFY”是问题所涉及的其他数据库系统的语法 (2认同)