Отфильтрованный некластерный индекс ненормального поведения - PullRequest
0 голосов
/ 13 августа 2011

У меня есть таблица, которая создала несколько отфильтрованных некластеризованных столбцов, например:

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 не должен создавать индекс для них. Почему я получаю вышеуказанную ошибку?

спасибо

РЕДАКТИРОВАТЬ 1) :

Интересный момент. Если я удаляю этот индекс и добавляю столбец (столбцы), а затем восстанавливаю этот индекс, индекс создается без ошибок. STRANGE !!!!

1 Ответ

1 голос
/ 13 августа 2011

Причина, по которой вы можете удалить индекс и затем добавить данные, а затем воссоздать индекс, заключается в том, что создание индекса не проверяет существующие данные, а только данные, которые вы пытаетесь вставить / обновить.

Вы 'вы не получаете сообщение об ошибке, потому что это отфильтрованный индекс, вы получаете его, потому что это уникальный индекс, и вы пытаетесь добавить повторяющиеся значения в столбец таблицы, в которой находится уникальный индекс.Это большая часть из них!Если вам нужны повторяющиеся данные, не делайте индекс уникальным.

...