【问题标题】:SQL Server Switch more than one Partition at onceSQL Server 一次切换多个分区
【发布时间】:2013-07-12 02:00:26
【问题描述】:

我在一个表中有 100 个分区,我需要切换到其相应的阶段表(在同一个 FG 上并具有对齐的索引) 目前我正在使用下面的查询

更改表 MS_PROD 将分区 5 切换到 MS_Stage PARTITION 5

我最终要对所有 100 个分区执行此操作,有没有一种快速的方法可以并行切换所有分区。

【问题讨论】:

  • 不。您将需要一个迭代过程(循环/光标)来循环并执行每个命令。这显然是一个串行操作。您还必须记住 swtich 是一种元数据操作,因此并行运行不会为您节省太多时间。

标签: sql-server sql-server-2008 switch-statement database-partitioning


【解决方案1】:

我不知道。我通常会做的是将开关放在循环内。像这样的:

DECLARE @Partitions TABLE (PartitionId int PRIMARY KEY CLUSTERED);
DECLARE @PartitionId INT;

INSERT @Partitions(PartitionId)
    SELECT 
        prv.boundary_id PartitionId
    FROM sys.partition_functions AS pf 
    INNER JOIN sys.partition_range_values prv ON prv.function_id=pf.function_id
    WHERE (pf.name=N'PartitionFunctionName');

WHILE EXISTS (SELECT NULL FROM @Partitions)
    BEGIN

        SELECT TOP 1 @PartitionId = PartitionId FROM @Partitions;

        ALTER TABLE MS_PROD SWITCH PARTITION @PartitionId TO MS_Stage PARTITION @PartitionId;

        RAISERROR('Switched PartitionId %d to Stage',0,1,@PartitionId) WITH NOWAIT;

        DELETE @Partitions WHERE PartitionId = @PartitionId;

    END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 2020-12-10
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多