我想设置一个唯一约束,允许使用SQL Server 2014 Express的空值

时间:2015-02-26 12:32:14

标签: sql-server unique-constraint sql-server-2014-express

我想设置一个允许使用SQL Server 2014 Express的空值的唯一约束。我知道之前已经问过这个问题,但5年前就在这篇文章中被问过了。

How do I create a unique constraint that also allows nulls?

我只是开始学习SQL所以我想看看自5年前以来是否有其他选项可供使用。

我正在使用Unique Filtered Index,但我希望尽可能避免使用此索引。

谢谢。

1 个答案:

答案 0 :(得分:0)

你所关联的问题的答案仍然适用且是正确的,到目前为止似乎没有别的办法。

自2007年以来,有一个ticket on Microsoft Connect。正如那里和here建议的那样,您最好的选择是使用过滤索引或计算列,例如

CREATE TABLE [Orders] (
  [OrderId] INT IDENTITY(1,1) NOT NULL,
  [TrackingId] varchar(11) NULL,
  ...
  [TrackingIdUnique] AS (
      CASE WHEN [TrackingId] IS NULL
      THEN '#' + cast([OrderId] as varchar(12))
      ELSE [TrackingId_Unique] END
  ),
  CONSTRAINT [UQ_TrackingIdUnique] UNIQUE ([TrackingIdUnique])
)