0

哪里有一个没有主键的大表,它在三个字段上具有唯一索引,其中两个字段可以为空。

有相当多的应用程序代码依赖于值(或非值)NULL 含义,因此我们必须保留列的可为空值,它们是通常是主键/聚集索引的键列.

对于这三个字段,有什么可以按索引进行的吗?我们刚刚将数据库升级到 SQL Server 2012。

即使作为可为空的列,这些行也将在这些字段中包含唯一值。

CREATE TABLE [troublesome].[table](
[AId] [int] NOT NULL,
[BNumber] [int] NULL,
[UserId] [uniqueidentifier] NULL,...
4

1 回答 1

5

聚集索引可以具有可为空的键列。首先,删除唯一的非聚集索引,然后:

CREATE UNIQUE CLUSTERED INDEX uq_c_tt
  ON dbo.troublesome_table(AId, BNumber, UserId);

我怀疑你试图创建一个主键,而不是一个聚集索引?这是一个常见的误解(可能是因为每个表只允许一个,并且默认情况下主键是聚集的)但是主键和聚集索引不是一回事。聚集索引不一定是主键,主键也不一定是聚集的。

于 2013-07-30T00:50:09.370 回答