SQL怎么在已经创建的表中插入一列,对这一列进行唯一约束。

ALTER TABLE Employees
ADD 邮箱 VarChar(20)
ALTER TABLE Employees with nocheck
ADD CONSTRAINT UQ_Email1 UNIQUE (邮箱)

为什么出现
消息 1505,级别 16,状态 1,第 1 行
CREATE UNIQUE INDEX 语句终止,因为发现对象名称 'dbo.Employees' 和索引名称 'UQ_Email1' 有重复的键。重复的键值为 (<NULL>)。
消息 1750,级别 16,状态 0,第 1 行
无法创建约束。请参阅前面的错误消息。
语句已终止。

的错误????

如果已经存在的表中是有数据的,那么你不能用一句SQL实现你的目标。
因为,如果表中已经有数据,那么你创建的新列,在已有的记录中要么是空值,要么是你设置的缺省值,因此所有记录中,该列的值都是一样的,因此对该列不能建立唯一性约束。
可采用两种做法:
1.删除原表的所有数据,就可以创建;
2.先不建立唯一约束,只建立列,然后给每行记录的该列赋于不同的值。
然后再设置该列为非空;
然后再为该列设置唯一约束。追问

表中并没有数据啊

追答

ALTER TABLE Employees ADD 邮箱 VarChar(20) not null
后面要加 not null,否则不能 unique 索引

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-20
唯一索引列的数据不能有空值,数据不能重复追问

那要怎么才能实现上面的目的。

追答

两种处理方式:
法1、删除要建唯一索引列的为空数据,对重复数据进行去重,或直接删除重复数据。
法2、对空数据补唯一值,对重复数据的列值重新赋予唯一值

第2个回答  2012-11-21
刚没发现,你忽略掉他就行了,因为已经创建成功了。
第3个回答  2012-11-20
给你这个字段加个默认值试试追问

好像是不是有一个可以忽略之前已经输入的数据的语句啊

相似回答