所以我的项目要求我使用分区将名为 Leases 的表分成两个(分区的一侧是早于 2003 年 1 月 15 日的租约,另一侧是比该日期更新的租约)
基本上我之前创建了一个名为“Leases”的表,我想为其创建一个分区(我需要创建一个全新的表来执行此操作),因此我将该表中的所有数据复制到一个名为“Leases2”的新表现在,当我尝试传输所有约束时,除了主键约束之外,它们在新表上都执行时没有错误。
PS:我是sql新手。
所以我像这样创建了我的分区:
CREATE TABLE Leases2
(
ContractDate datetime NOT NULL,
FirstPaymentDate datetime NOT NULL,
MonthlyPayment money NOT NULL,
NumPayments tinyint NOT NULL,
VIN char(23) NOT NULL,
CustomerID int NOT NULL,
LeaseTermID int NOT NULL
)
ON LeasesOldNewScheme (ContractDate)
GO
CREATE PARTITION FUNCTION LeasesOldNew (datetime)
AS RANGE RIGHT FOR VALUES('2003-01-15 00:00:00.000')
GO
CREATE PARTITION SCHEME LeasesOldNewScheme AS
PARTITION LeasesOldNew TO (OLeases, NLeases)
GO
ALTER TABLE Leases2
ADD PRIMARY KEY (LeaseTermID);
我收到这个错误
“列‘ContractDate’是索引‘PK__Leases2__30F848ED’的分区列。唯一索引的分区列必须是索引键的子集。”
(合同日期是其中一栏)
看来解决方法只是在索引列中包含“ContractDate”。分区索引是与表分区一起创建的,并且需要在这些相同的分区内进行分区。这意味着索引需要以首先沿着分区列(ContractDate)排序的方式进行排序。
要添加你的 PK,它会是这样的:
ALTER TABLE Leases2
ADD PRIMARY KEY (ContractDate,LeaseTermID);
我在这里猜测,因为我对sql-server不太熟悉,我必须研究文档。
请注意,对于所有支持分区的数据库实现来说,情况也不尽相同。例如,Oracle 允许您独立于分区方案创建本地索引(在分区内)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)