Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从分区表中删除标识_Sql Server_Sql Server 2012 - Fatal编程技术网

Sql server 从分区表中删除标识

Sql server 从分区表中删除标识,sql-server,sql-server-2012,Sql Server,Sql Server 2012,在中,使用分区切换的魔力提供了一种从表中消除标识属性的巧妙方法。但是,如果您的表已经分区,则这种方法不起作用。事实上,这种方法更适用于非常大的多TB表,这些表可能已经分区 由于我正是在这种情况下工作的——试图消除一些非常大的表上的IDENTITY属性——有人知道如何将此解决方案应用于已经分区的表吗 编辑:这实际上比我最初想象的要复杂。至少有一个索引未分区。当我尝试传统分区切换时: ALTER TABLE [dbo].[era_adj] SWITCH PARTITION 1 TO [dbo].[t

在中,使用分区切换的魔力提供了一种从表中消除标识属性的巧妙方法。但是,如果您的表已经分区,则这种方法不起作用。事实上,这种方法更适用于非常大的多TB表,这些表可能已经分区

由于我正是在这种情况下工作的——试图消除一些非常大的表上的IDENTITY属性——有人知道如何将此解决方案应用于已经分区的表吗

编辑:这实际上比我最初想象的要复杂。至少有一个索引未分区。当我尝试传统分区切换时:

ALTER TABLE [dbo].[era_adj] SWITCH PARTITION 1 TO [dbo].[tmp_ms_xx_era_adj] PARTITION 1;
. . .
ALTER TABLE [dbo].[era_adj] SWITCH PARTITION 57 TO [dbo].[tmp_ms_xx_era_adj] PARTITION 57;
我得到一个错误:

Msg 7733, Level 16, State 4, Line 21
'ALTER TABLE SWITCH' statement failed. The table 'ERADev.dbo.era_adj' is partitioned while index 'PK_era_adj' is not partitioned.

所以现在我还需要弄清楚如何对索引进行分区…

标识列是分区键吗?如果不是,您不能在同一分区架构/函数上创建一个没有identity属性的相同表,并切换每个分区吗?也许您需要在中间使用一个虚拟的、未分区的空表,并一次移动一个分区。我没有尝试过,只是一个疯狂的理论,因此是一个注释而不是答案。不,identity列不是分区键。如果没有经验丰富的工程师的意见,我会采用你的方法。如果我没有收到任何回复,我会尝试并发布它是否有效。@DavidMercer-@DavidMercer你说得对。SQL Server MVP不是一个有经验的人。诚然,我说过我没有尝试过,但我不确定这到底是什么意思-