2012-01-03 106 views
6

我有一个由TRANSACTION_DATE_TIME分区的表。SQL Server分区 - 唯一索引错误

表中有一列:ID。

我想在分区方案作为创建ID唯一索引:

CREATE UNIQUE NONCLUSTERED INDEX [IX_ID_ON_PS_DATETIME] ON [CRD].[TRANSACTION] 
(
    [ID] ASC 
) ON [PS_DATETIME_WEEKLY]([TRANSACTION_DATE_TIME]) 

但SQL说:“唯一索引必须是索引键的子集分区列”。

我真的不需要此索引中的TRANSACTION_DATE_TIME列。

如何在不使用TRANSACTION_DATE_TIME列的情况下创建索引?

回答

8

或者你创建 -partitioned索引,或者你HAVE包括分区键进入分区索引是这样的:

分区索引

CREATE UNIQUE NONCLUSTERED INDEX [IX_ID_ON_PS_DATETIME] ON [CRD].[TRANSACTION] 
(
    [ID] ASC, 
    TRANSACTION_DATE_TIME 
) ON [PS_DATETIME_WEEKLY]([TRANSACTION_DATE_TIME]) 

OR

非分区索引

CREATE UNIQUE NONCLUSTERED INDEX [IX_ID_ON_PS_DATETIME] ON [CRD].[TRANSACTION] 
(
    [ID] ASC 
) ON PRIMARY 
0

从在TechNet微软页

当分区的唯一索引(clustered或非聚集)时, 分区列必须选自那些在唯一 索引关键字使用来选择。如果不可能将分区列设置为唯一密钥中包含的 ,则必须使用DML触发器来代替 实施唯一性。

因此,要实现一种变通方法,您可以检查此链接了...从博客一个变通方法,另一个在评论

Dealing with Unique Columns when Using Table Partitioning