在MSsql我有一个表创建如下:
CREATE TABLE [mytable] (fkid int NOT NULL,data varchar(255) CONSTRAINT DF_mytable_data DEFAULT '' NOT NULL); ALTER TABLE [mytable] ADD CONSTRAINT PK_mytable_data PRIMARY KEY (fkid,data);
现在我想将’data’列的长度从255增加到4000.
如果我只是试试:
ALTER TABLE [mytable] ALTER COLUMN data varchar(4000);
然后我得到这个错误:
The object 'PK_mytable_data' is dependent on the column 'data'
如果我尝试这样:
ALTER TABLE [mytable] DROP CONSTRAINT PK_mytable_data; ALTER TABLE [mytable] ALTER COLUMN data varchar(4000); ALTER TABLE [mytable] ADD CONSTRAINT PK_mytable_data PRIMARY KEY (fkid,data);
然后我得到这个错误:
Cannot define PRIMARY KEY constraint on nullable column in table 'mytable'
我失踪了什么两个列都是用NOT NULL定义的,所以为什么MSsql报告它丢弃后不能重新创建这个约束?
谢谢!
埃文
解决方法
通过将数据类型更改为varchar(4000),可以使其接受NULL.
尝试这个:
ALTER TABLE [mytable] DROP CONSTRAINT PK_mytable_data; ALTER TABLE [mytable] ALTER COLUMN data varchar(4000) NOT NULL; ALTER TABLE [mytable] ADD CONSTRAINT PK_mytable_data PRIMARY KEY (fkid,data);
请注意,索引大小(为PK隐式创建)大小限制为900字节,并且更大值的插入将失败.