Wie in der Fehlermeldung angegeben, muss jeder partitionorientierte eindeutige Index den Partitionierungsschlüssel im Indexschlüssel enthalten. Diese Anforderung ist vorhanden, damit die Engine die Eindeutigkeit von Updates erzwingen kann, ohne jede Partition zu überprüfen.
In Ihrem Fall bedeutet dies, dass Sie OrderDate
den nicht gruppierten Indexschlüssel aufnehmen oder einen nicht ausgerichteten Index haben. Beides ist abhängig von Ihren Umständen eine potenziell gültige Auswahl. Um die Ausrichtung beizubehalten, lauten Ihre Tabellen- und Indexdefinitionen wie folgt:
CREATE TABLE dbo.Orders
(
OrderID integer NOT NULL,
Name nvarchar(20) NULL,
OrderDate date NOT NULL,
CONSTRAINT PK__Orders_OrderID_OrderDate
PRIMARY KEY NONCLUSTERED
(OrderID, OrderDate)
ON PS (OrderDate)
)
ON PS (OrderDate);
GO
CREATE CLUSTERED INDEX CX__Orders_OrderDate
ON dbo.Orders (OrderDate)
ON PS (OrderDate);
Dies ändert natürlich die Eindeutigkeit, die der nicht gruppierte Index erzwingt. Jetzt ist nur noch die Kombination von OrderID
und OrderDate
garantiert einzigartig. Es ist theoretisch möglich, doppelte OrderID
s hinzuzufügen , solange das OrderDate
anders ist. Ob diese Änderung der Semantik für Sie akzeptabel ist, hängt von Ihren Umständen ab, aber Sie sollten sich dessen bewusst sein.
Die Alternative besteht darin, den nicht gruppierten Primärschlüssel nicht auszurichten:
CREATE TABLE dbo.Orders
(
OrderID integer NOT NULL,
Name nvarchar(20) NULL,
OrderDate date NOT NULL,
CONSTRAINT PK__Orders_OrderID
PRIMARY KEY NONCLUSTERED
(OrderID)
ON [PRIMARY]
)
ON PS (OrderDate);
GO
CREATE CLUSTERED INDEX CX__Orders_OrderDate
ON dbo.Orders (OrderDate)
ON PS (OrderDate);
Dies bewahrt die Einzigartigkeit von OrderID
allein und hat einige Vorteile bei Abfragen, die mithilfe des Index berechnet MIN
oder MAX
aggregiert werden. Sie verlieren jedoch die Möglichkeit, SWITCH
Partitionen ein- und auszuschalten, ohne den Primärschlüssel fallen zu lassen und ihn nach dem Umschaltvorgang neu zu erstellen.
Weitere Informationen zur Partitionierung finden Sie in diesem Abschnitt von Books Online und zu den Themen ausgerichtete und nicht ausgerichtete Indizes in dieser hervorragenden Antwort von Remus Rusanu.