2011-08-12 87 views
0

我创建一个表中的一些过滤非群集上的一些列,比如:过滤非聚集索引异常behaivior

CREATE UNIQUE NONCLUSTERED INDEX [IX_Sh_Esh] ON [dbo].[My_Tbl] 
(
    [City_Code] ASC, 
[Sh_Esh] ASC 
) 
WHERE ([Sh_Bod]=(0) AND [Noe_Fa]=(0)) 
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF,   IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
    GO 

和:

CREATE UNIQUE NONCLUSTERED INDEX [IX_Kho] ON [dbo].[My_Tbl] 
(
[City_Code] ASC, 
[Kho] ASC 
) 
WHERE ([Sh_Bod]=(0) AND [Sh_Esh]=(0) AND [Noe_Fa]=(1)) 
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF,  IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
GO 

我创造我的表这个指标与没有错误,但当我想要添加一个新的列我得到这个错误:

'My_Tbl' table 
- Unable to create index 'IX_Sh_Esh'. 
The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'My_Tbl' and the index name 'IX_Sh_Esh'. The duplicate key value is (3, 0). 

声明已终止。

我的表中的数据是:

enter image description here

根据第一索引,因为行1号和4号不满足其中cluase不应该them.Why创建索引我得到上面的错误?

感谢

EDIT 1)

有有趣的点时,若我删除索引,并添加列(软件),然后重新创建索引,索引没有error.STRANGE创造! !

+0

表中只有6行? – JNK

+0

没有,还有更多的错误,但只显示(3,0)为复制 – Arian

+2

所以你做了一个'SELECT * FROM dbo.My_Tbl WHERE CITY_CODE = 3,Sh_Esh = 0',看是否有其他行? – JNK

回答

1

你可以删除索引,然后添加数据,然后重新创建索引的原因是因为创建索引不检查现有数据,您试图插入/更新仅仅是数据。

,因为其筛选的索引,你得到它,因为它的唯一索引,并且你想重复值添加到表中的列的唯一索引是你没有得到错误。这是他们的优点!如果您需要重复数据,请勿使索引唯一。

+0

谢谢,但请阅读我的问题fully.I'm不是要添加数据我想与当前正确的数据添加新列 – Arian

+0

'创造出独特的index'不检查现有数据创建索引时。 –