УНИКАЛЬНЫЙ ИНДЕКС не работает - PullRequest
0 голосов
/ 24 июня 2018

У меня есть уникальный индекс, где условие. Но это не работает. может быть, я что-то упустил.

CREATE UNIQUE NONCLUSTERED INDEX [IDX_NBR_TIN_INFO_PASSPORT] 
ON [dbo].[NBR_TIN_INFO] ([PASSPORT_NUMBER] ASC)
WHERE (([PASSPORT_NUMBER] IS NOT NULL) AND ([IS_TOKEN_APPROVED] <> 0))
GO

Данные, вставленные в таблицу, показаны здесь:

PASSPORT_NUMBER | IS_TOKEN_APPROVED
----------------+-------------------
XXX-487545      | NULL
XXX-487545      |   0
XXX-487545      | NULL

Но строки 1 или 3 должны быть заблокированы индексом.

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Вам необходимо решить эту проблему, добавив оба столбца в индекс и удалив фильтр

CREATE UNIQUE NONCLUSTERED INDEX [IDX_NBR_TIN_INFO_PASSPORT] 
    ON [dbo].[NBR_TIN_INFO] ([PASSPORT_NUMBER] ASC), 
       [dbo].[NBR_TIN_INFO] ([IS_TOKEN_APPROVED])
GO
0 голосов
/ 24 июня 2018

Это происходит потому, что NULL неизвестно при каждом сравнении, то есть ни 0 = NULL, ни 0 <> NULL. Следовательно, эти строки не индексируются. Попробуйте это:

WHERE (([PASSPORT_NUMBER] IS NOT NULL)
  AND ([IS_TOKEN_APPROVED]<>0 OR [IS_TOKEN_APPROVED] IS NULL))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...