【问题标题】:Error in creating a unique index创建唯一索引时出错
【发布时间】:2014-11-27 23:53:48
【问题描述】:

大家好。我试图创建一个忽略空值的唯一索引。 这是我尝试过的四个代码:

CREATE UNIQUE NONCLUSTERED INDEX [BidContractNumber_UNIQUE] ON [biddetails] (BidContractNumber) WHERE [biddetails].[BidContractNumber] IS NOT NULL;

CREATE UNIQUE NONCLUSTERED INDEX [BidContractNumber_UNIQUE] ON [biddetails] (BidContractNumber) WHERE NOT((BidContractNumber) IS NULL);

CREATE UNIQUE INDEX BidContractNumber_UNIQUE ON biddetails (BidContractNumber) WHERE [BidContractNumber] IS NOT NULL;

CREATE UNIQUE INDEX BidContractNumber_UNIQUE ON biddetails (BidContractNumber) WHERE [BidContractNumber] IS NOT NULL;

但我总是收到这条消息:

Msg 156, Level 15, State 1, Line 2 Incorrect syntax near the keyword 'WHERE'.

有人可以帮我纠正这个问题吗?谢谢..

附言

我是 SQL Server 的新手,我被要求迁移我们的数据库..

【问题讨论】:

  • 过滤索引首先出现在 SQL Server 2008 中。
  • aww... SQL Server 2005 有什么解决方法吗? :(
  • 是的,有,但你不会喜欢它。一般的想法是创建一个定义为isnull(IndexedCol, KeyCol) 的计算列,然后在其上创建一个唯一索引。这里有很多问题和缺点,所以只有在出于某种原因绝对需要时才选择这条路。
  • 我想我没有任何其他选择,所以......但是那里的“捕获”和“缺点”是什么?

标签: sql-server database sql-server-2005 unique-index


【解决方案1】:

我不相信 SQL Server 2005 上提供的过滤索引,它们是在 SQL Server 2008 中引入的。

(https://www.simple-talk.com/sql/performance/introduction-to-sql-server-filtered-indexes/)

【讨论】:

  • 这个问题有其他解决方案吗?
  • 不,也许您可​​以间接创建一个新的(计算的)列来指示该值为 NULL。取决于你想做什么
猜你喜欢
  • 1970-01-01
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 2021-10-30
相关资源
最近更新 更多