我试图移动一个字段在表中做一个不同的位置(我只是试图按字母顺序获取它)。当我单击保存时,我收到此错误消息(TaskID是另一个字段的名称):
'tblTask' table
- Unable to create index 'idx_TaskID_notnull'.
The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.tblTask' and the index name 'idx_TaskID_notnull'. The duplicate key value is (<NULL>).
The statement has been terminated.
我有一个具有过滤器TaskID IS NOT NULL
的TaskID的唯一非聚集索引。
为什么我收到此错误?
答案 0 :(得分:0)
您只能获得唯一索引中的任何一个值,包括NULL
,因此,如果您有多个NULL
个值的行,那就是您收到错误的原因。
我认为,因为你说的是刚创建专栏的“全新领域”。如果您这样做而没有填充它,则所有值都为NULL
。
解决这个问题的最简单方法是:
填充列的相应值,或者如果您不知道要启动的话,至少填写您想要的默认值。
ALTER
您的列,以便它是非空的
alter table dbo.tbltask alter column taskid int not null
为列添加默认约束,使其始终具有值。
alter table tbltask add constraint df_taskid default (0) for taskid
或者,如果您希望表中的所有旧行都为NULL
,并且只有新行始终为NOT NULL
,则可以添加过滤索引,因为您正在使用2008(或更高版本) )。
create unique nonclustered index idx_TaskID_notnull on dbo.tbltask (taskid)
where taskid is not null