唯一的非聚集索引出错

时间:2016-01-28 18:38:58

标签: sql sql-server-2008 indexing

我试图移动一个字段在表中做一个不同的位置(我只是试图按字母顺序获取它)。当我单击保存时,我收到此错误消息(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的唯一非聚集索引。

为什么我收到此错误?

1 个答案:

答案 0 :(得分:0)

您只能获得唯一索引中的任何一个值,包括NULL,因此,如果您有多个NULL个值的行,那就是您收到错误的原因。

我认为,因为你说的是​​刚创建专栏的“全新领域”。如果您这样做而没有填充它,则所有值都为NULL

解决这个问题的最简单方法是:

  1. 填充列的相应值,或者如果您不知道要启动的话,至少填写您想要的默认值。

  2. ALTER您的列,以便它是非空的

    alter table dbo.tbltask alter column taskid int not null

  3. 为列添加默认约束,使其始终具有值。

    alter table tbltask add constraint df_taskid default (0) for taskid

  4. 或者,如果您希望表中的所有旧行都为NULL,并且只有新行始终为NOT NULL,则可以添加过滤索引,因为您正在使用2008(或更高版本) )。

    create unique nonclustered index idx_TaskID_notnull on dbo.tbltask (taskid) 
        where taskid is not null