Sql server 唯一索引不工作

Sql server 唯一索引不工作,sql-server,indexing,Sql Server,Indexing,我有一个唯一的索引,其中包含条件。但它不起作用。也许我错过了什么 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 但是第1行或第3行应该被索引阻止。发生这种情况是因为

我有一个唯一的索引,其中包含条件。但它不起作用。也许我错过了什么

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

但是第1行或第3行应该被索引阻止。

发生这种情况是因为每次比较都不知道NULL,即0=NULL或0 NULL。因此,您不会将这些行编入索引。试试这个:

WHERE (([PASSPORT_NUMBER] IS NOT NULL)
  AND ([IS_TOKEN_APPROVED]<>0 OR [IS_TOKEN_APPROVED] IS NULL))
其中([护照号码]不为空)
和([IS_TOKEN_APPROVED]0或[IS_TOKEN_APPROVED]为空))

您需要通过向索引中添加两列并删除筛选器来解决此问题

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

NULL
比较的结果不是false,而是未知的。您无法将某物与无进行比较。错误。关键字“with”附近的语法不正确。如果此语句是公共表表达式、xmlnamespaces子句或更改跟踪上下文子句,则前一条语句必须以分号结尾。@TT。谢谢你的更正。我在您的代码中没有看到“with”。当我使用WHERE([PASSPORT\u NUMBER]不为NULL或[IS\u TOKEN\u APPROVED]0)时,会显示错误消息“关键字“OR”附近的语法不正确”。您需要跳过筛选器,请参阅我的更新答案。
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