创建约束时报错

十六钟声 2013-02-04 09:17:26
我在创建的一个XSB表中执行以下语句:
ALTER TABLE XSB
ADD 身份证号 char(18)
CONSTRAINT SF_UK UNIQUE NONCLUSTERED(身份证号)
但老是报错啊:
消息 1505,级别 16,状态 1,第 1 行
因为发现对象名称 'dbo.XSB' 和索引名称 'SF_UK' 有重复的键,所以 CREATE UNIQUE INDEX 语句终止。重复的键值为 (<NULL>)。

请问这是什么问题啊,谁能帮忙解决一下啊 ,谢谢了
...全文
494 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
十六钟声 2013-02-04
  • 打赏
  • 举报
回复
这样其实有想过,只是这是书本上的一个例子,照着做就是有错,还是谢谢大家了
shoppo0505 2013-02-04
  • 打赏
  • 举报
回复
引用 6 楼 a8219959257 的回复:
如果指定为NOT NULL说这样不行,如果指定了DEFAULTd的话又会是同样的错误,哎,不知道怎么解决啊
那就一步一步来。 先设置为 允许NULL, 然后手动填入值,再设置为Not NULL, 再加入唯一约束属性.
szm341 2013-02-04
  • 打赏
  • 举报
回复
解决办法就是创建时可以允许null,但先不要创建唯一键 ALTER TABLE XSB ADD 身份证号 char(18) 然后根据你的实际情况,把所有该列null值都update为你想要的或者临时的数据 要注意数据不能重复,然后再创建唯一键 ALTER TABLE XSB ADD CONSTRAINT SF_UK UNIQUE NONCLUSTERED(身份证号)
十六钟声 2013-02-04
  • 打赏
  • 举报
回复
如果指定为NOT NULL说这样不行,如果指定了DEFAULTd的话又会是同样的错误,哎,不知道怎么解决啊
szm341 2013-02-04
  • 打赏
  • 举报
回复
新建的列,一般指定允许null值,那么新建的列的所有值都是null 如果指定not null的话,需要添加一个非null默认值并用默认值填充 你应该是允许null的列,所以该列值在已存在数据中都是null
十六钟声 2013-02-04
  • 打赏
  • 举报
回复
忘了说了,XSB表里面没有身份证号这一列,现在是要新添加的,这样也有重复的吗
szm341 2013-02-04
  • 打赏
  • 举报
回复
引用 2 楼 a8219959257 的回复:
不对啊,我的XSB里面一个索引也没有了还是同样报错啊
唯一约束是通过创建唯一索引来实现的,所以创建唯一约束的本质是创建一个唯一索引 无论创建约束还是索引,唯一的定义是不重复,你的数据中已存在了重复值 (对于唯一约束来说,两个null也是重复的),所以无法创建唯一约束 需要清除重复值才可以创建
十六钟声 2013-02-04
  • 打赏
  • 举报
回复
不对啊,我的XSB里面一个索引也没有了还是同样报错啊
shoppo0505 2013-02-04
  • 打赏
  • 举报
回复
看看索引'SF_UK' 中对于哪列建立了唯一索引,就在这一列中,有重复值Null。

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧