【问题标题】:Changing the maximum length of a varchar column?更改 varchar 列的最大长度?
【发布时间】:2012-02-08 09:16:18
【问题描述】:

我正在尝试在不丢失内容的情况下将 varchar 列的长度从 255 个字符更新为 500 个字符。我之前删除并重新创建了表,但我从未接触过 alter 语句,我认为我需要使用它来执行此操作。我在这里找到了文档:ALTER TABLE (Transfact-SQL) 但是我无法确定它的正面或反面。

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

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

我该如何处理?有没有更好的关于这个语句的文档(我搜索了一个示例语句但没有找到)?

【问题讨论】:

  • 在 Microsoft SQL Server Management Studio 中,您还可以右键单击表并选择“设计”以打开设计视图。从这里您会看到表中每列的列表,每列的各自数据类型都列在它旁边。您可以在此处修改值。但是,此方法将删除表并重建/读取它,IIRC。

标签: sql sql-server sql-server-2008 tsql varchar


【解决方案1】:

你需要

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'的目的吗?只是好奇为什么你的答案是米奇没有的?
  • 所以 [NOT NULL] 指定 NULL 值 - 不能 - 放在列中?
  • @Michael - 没有方括号,是的。方括号表示该位语法是可选的。如果您省略它,则默认允许NULL。
  • 对其进行了排序 :)..ALTER COLUMN MY_COL SET DATA TYPE VARCHAR(100)
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    对于 MSSQL 以外的 MySQL 或 DBMS,您可能需要使用 modify 而不是 alter 作为列值:

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

    【讨论】:

    • 这就是已经发布的内容。你有什么新的想分享的吗?
    • 它也适用于 MySQL,这个问题被标记为 [TSQL] 所以它在错误的地方
    • MODIFY 是新功能。 ALTER COLUMN 给了我一个语法错误,但 MODIFY COLUMN 对我来说没有问题。
    • @KGBird - 因为您没有使用 SQL Server。 MODIFY 是其他一些数据库系统的语法,而不是问题所涉及的
    【解决方案4】:
    ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME VARCHAR(40);
    

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

    【讨论】:

      【解决方案5】:

      在 IntelliJ 中使用 Maria-DB 和 DB-Navigator 工具,MODIFY Column 对我有用,而不是 Alter Column

      【讨论】:

      • 这篇文章对@Mitch Wheat 于 2012 年 1 月 12 日 1:37 提供的答案有何新意?
      【解决方案6】:

      在 Oracle SQL Developer 中

      ALTER TABLE car_details MODIFY torque VARCHAR(100);

      【讨论】:

      • 这只是重复/重新散列 Jett 2019 年 8 月的回答。
      【解决方案7】:

      我也有上述疑问,对我有用的是

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

      【讨论】:

        【解决方案8】:

        这在 db2 中对我有用:

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

        【讨论】:

          【解决方案9】:

          作为替代方案,您可以保存旧数据并使用新参数创建新表。

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

          就我个人而言,我这样做了。

          【讨论】:

            【解决方案10】:

            对于 MariaDB,使用 修改列:

            ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR (500);
            

            它会起作用的。

            【讨论】:

            • 问题是关于SQL server的
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-12-05
            • 2016-09-14
            • 2012-03-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-09-16
            相关资源
            最近更新 更多