【问题标题】:How to alter column of a table with indexes?如何使用索引更改表的列?
【发布时间】:2017-09-05 06:03:20
【问题描述】:

我想将具有某些索引的表中的 a 列的列大小从 varchar(200) 更改为 varchar(8000)。我应该如何进行?

【问题讨论】:

    标签: sql sql-server database tsql alter-table


    【解决方案1】:

    既然是VARCHAR 并且您正在增加大小,那么只需ALTER TABLE ... ALTER COLUMN ... 就足够了。

    不能更改索引中包含的列的数据类型除非该列是 varchar、nvarchar 或 varbinary 数据类型,并且新大小等于或大于旧大小。

    否则,您将删除索引,更改列,然后重新添加索引。

    请注意,尽管 SQL Server maximum index key size 是 900(或新版本为 1700),所以即使 ALTER 会成功,未来的 INSERT 超过 900 长度限制的数据将失败并出现错误:

    Msg 1946, Level 16, State 3, Line 13
    Operation failed. The index entry of length ... bytes for the index '...' exceeds the maximum length of 900 bytes.
    

    【讨论】:

    • 感谢您的帮助:)
    【解决方案2】:

    在 MSSQL 上试试这个:

    drop index person.idx_pers_fullname
    ALTER table person alter COLUMN  pers_firstname nvarchar(8000)
    create index idx_pers_fullname on person(pers_firstname)
    

    【讨论】:

    • nvarchar 限制为 4000。除此之外,您需要使用 nvarchar(max)
    【解决方案3】:

    Oracle 中的示例:

    CREATE TABLE EMP (NAME VARCHAR(200));
    
    ALTER TABLE  EMP MODIFY  NAME VARCHAR(800);
    

    【讨论】:

      猜你喜欢
      • 2017-03-10
      • 2020-02-06
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 2012-03-28
      • 2021-12-10
      相关资源
      最近更新 更多