我想使用分区 ID 从特定分区中删除数据。我得到了从 SQL 2016 的特定分区截断数据的查询,但没有找到任何低版本的查询。
我尝试以下查询仅删除分区 ID 为 14 和 15 的分区中的数据。
delete from partitiontable1 WITH (PARTITIONS (14 to 15))
删除语句是否会连同数据一起删除分区本身?
我想保持分区完整并从特定分区中删除数据。说,我在一个表上创建了分区,它有 5 个分区(1、2、3、4、5),我只想从第 2 和第 3 分区中删除数据。
此删除语句是无效的 SQL Server 2012 语法,因此它只会引发错误。
使用
MERGE
DDL 删除分区及其关联边界;DML 语句,例如DELETE
从不删除分区。在 SQL 2014 及更早版本中,从分区中删除所有行的最有效方法是使用
SWITCH
(SQL 2016 允许使用 指定特定分区TRUNCATE
)。要使用 SWITCH,请创建具有相同架构和索引的类似分区临时表。然后,您可以在表之间切换数据作为元数据操作,然后TRUNCATE
是临时表。这个答案来自Cathrine Wilhemsen,如果她碰巧参加附近的活动,我强烈建议她阅读和观看礼物。代码主要来自她,特别是对Itzik Ben-Gan和他的函数 GetNums 的大力支持。
总而言之,您希望将分区切换到新表并删除该表。之后你仍然会有你的分区号,请看下面的代码(同样主要来自 Cathrine,我稍微改变了它。)作为演示。