【问题标题】:Is there a way to drop a range value from a partition table (sql server 2012)有没有办法从分区表中删除范围值(sql server 2012)
【发布时间】:2015-09-01 07:10:38
【问题描述】:

我有一个分区表“TableA”。 我在列名“RecorDate”(DATE 类型)上创建了一个分区。 过去 6 个月的记录我不想保存它们,我想删除它们。

有没有一种简单的方法可以删除范围值或特定分区号(甚至是所有范围,例如“01-01-2014”到“01-01-2015”)。

类似于 ORACLE,TRUNCATE TABLE WITH(PARTITION(x,y to z))

顺便说一句 我知道切换分区命令,将范围移动到另一个表,然后执行命令

TRUNCATE TABLE TableNameb ;
GO

10 倍

【问题讨论】:

    标签: sql sql-server tsql sql-server-2012 database-partitioning


    【解决方案1】:

    TRUNCATE WITH PARTITION 将在 SQL Server 2016 中提供

    WITH ( 分区 ( { | } [ , ...n]))

    Applies to: SQL Server (SQL Server 2016 Community Technology Preview 2 (CTP2) through current version).
    
    Specifies the partitions to truncate or from which all rows are removed. If the table is not partitioned, the WITH PARTITIONS argument
    

    会产生错误。如果未提供 WITH PARTITIONS 子句, 整个表格将被截断。

    <partition_number_expression> can be specified in the following ways:
    
        Provide the number of a partition, for example: WITH (PARTITIONS (2))
    
        Provide the partition numbers for several individual partitions separated by commas, for example: WITH (PARTITIONS (1, 5))
    
        Provide both ranges and individual partitions, for example: WITH (PARTITIONS (2, 4, 6 TO 8))
    
        <range> can be specified as partition numbers separated by the word TO, for example: WITH (PARTITIONS (6 TO 8))
    

    例子:

    TRUNCATE TABLE dbo.PartitionedTable WITH (PARTITIONS (2, 4, 6 TO 8))
    

    2016 年之前的 SQL Server

    今天你可以使用this

    正如您所注意到的,今天有一种方法可以通过 ALTER TABLE SWITCH 将分区移动到第二个表,然后 TRUNCATE 第二个表。如果两个表是同一个文件组的一部分,这实际上应该是一个低风险的操作,因为没有数据被移动,我们只是更新元数据。

    Example TABLE SWITCH

    【讨论】:

    • spanific partition(number) or range 的完整命令是什么。如果你能给我一个链接。
    • @itzikPaz 对不起,不明白你的意思。所有链接都在我的答案中。
    • @itzikPaz 所以只需在与分区表、SWITCH TABLE 相同的文件组和结构中创建第二个表并截断新表。就是这样。
    • 好的。谢谢。正如我在问题中所写,我已经知道这个选项。我认为还有其他我不熟悉的选项。
    • 关于同一主题的另一个问题。在从 TableA 到 TableB 的 SWITCH PARTITION 之后。移动的切换分区号(He Is An EMPTY Range)仍然存在于“OLD”表 TableA 中。有没有办法删除它?
    【解决方案2】:

    我会说从 table_name 中删除 *。从表中删除所有。 您可以在删除后使用 where 语句更准确。 自己调整命令看这里http://www.w3schools.com/sql/sql_between.asp

    【讨论】:

    • 对不起,但这不是我希望得到的解决方案(我们谈论的是 1.5-2.5 T 的行):( .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    相关资源
    最近更新 更多