5

我在GUID列上创建聚簇主键时犯了一个错误。 有很多表引用定义的外键表。 表格大小不重要。如何将聚簇主键转换为非聚簇而不丢失SQL Server 2005中的引用外键

我想将其从群集转换为非群集,而无需手动删除和重新创建任何外键甚至主键约束。

是否有可能在MS SQL2005中实现这一点,如果是的话?

如果是的话,是否可以实现ONLINE(无db停机时间)?

回答

3

您可以尝试先创建独特的非聚集NC索引,然后删除聚集的PK。 FK应该认识到这个其他指标(但可能不会:从未尝试过)。

当您运行ALTER TABLE以删除群集PK时,请使用ONLINE选项。但是,它仅在企业版中可用。

ALTER TABLE Mytable DROP CONSTRAINT PK_Mytable WITH (ONLINE = ON) 

对于ADD CONSTRAINT位,不能使用ONLINE。

基本上,你的选择是不阻塞,或者先创建另一个表,并在移动数据限制......

+2

我希望我能得到一个答案,而不词“尝试” ...... – alpav 2010-02-22 16:44:31

+0

@alpav:不幸的是,我'可能只是放弃这一切,修复,重新创建。并尝试记住下次:-)尝试与2亿行表:这是痛苦的... – gbn 2010-02-22 16:51:00

+2

FKs不承认另一个索引。当我试图通过ALTER TABLE Table2 NOCHECK CONSTRAINT FK_Table2_Table1创建另一个唯一约束并禁用外键约束之后尝试删除PK约束时,它会抱怨“约束'PK_Table1'正被表'Table2'引用,外键约束'FK_Table2_Table1'只有放弃FK才行。 – alpav 2010-03-11 19:37:59

相关问题