从 MS SQL 2012 中的特定分区删除数据

l.l*_*ith 4 performance sql-server partitioning sql-server-2012 query-performance

我想使用分区 ID 从特定分区中删除数据。我收到了从 SQL 2016 的特定分区截断数据的查询,但没有找到任何较低版本的查询。

我尝试在下面的查询中只删除分区 ID 为 14 和 15 的分区中的数据。

delete from  partitiontable1 WITH (PARTITIONS (14 to 15))
Run Code Online (Sandbox Code Playgroud)

delete 语句会删除分区本身和数据吗?

我想保持分区完整并从特定分区中删除数据。说,我在一个表上创建了分区,它有 5 个分区(1、2、3、4、5),我只想从第二个和第三个分区中删除数据。

Dan*_*man 7

此删除语句是无效的 SQL Server 2012 语法,因此它只会引发错误。

删除分区及其关联的边界是使用MERGEDDL完成的;DML 语句如DELETE从不删除分区。

从 SQL 2014 及更早版本中的分区中删除所有行的最有效方法是使用SWITCH(SQL 2016 允许使用 指定特定分区TRUNCATE)。要使用 SWITCH,请创建一个具有相同架构和索引的类似分区的临时表。然后,您可以在表之间切换数据作为元数据操作,然后TRUNCATE是暂存表。

ALTER TABLE dbo.YourTable
    SWITCH PARTITION 1 TO dbo.YourTable_Staging PARTITION 1;
ALTER TABLE dbo.YourTable
    SWITCH PARTITION 2 TO dbo.YourTable_Staging PARTITION 2;
ALTER TABLE dbo.YourTable
    SWITCH PARTITION 3 TO dbo.YourTable_Staging PARTITION 3;
ALTER TABLE dbo.YourTable
    SWITCH PARTITION 4 TO dbo.YourTable_Staging PARTITION 4;
ALTER TABLE dbo.YourTable
    SWITCH PARTITION 5 TO dbo.YourTable_Staging PARTITION 5;
TRUNCATE TABLE dbo.YourTable_Staging;
Run Code Online (Sandbox Code Playgroud)