【发布时间】:2017-09-05 06:03:20
【问题描述】:
我想将具有某些索引的表中的 a 列的列大小从 varchar(200) 更改为 varchar(8000)。我应该如何进行?
【问题讨论】:
标签: sql sql-server database tsql alter-table
我想将具有某些索引的表中的 a 列的列大小从 varchar(200) 更改为 varchar(8000)。我应该如何进行?
【问题讨论】:
标签: sql sql-server database tsql alter-table
既然是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.
【讨论】:
在 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)
【讨论】:
Oracle 中的示例:
CREATE TABLE EMP (NAME VARCHAR(200));
ALTER TABLE EMP MODIFY NAME VARCHAR(800);
【讨论】: