1

切换多个分区我有一个表100个parititons,我需要切换到其相应阶段表(在同一FG和对齐索引) 使用下面SQL Server的一次

查询目前即时通讯改变表MS_PROD 开关分区5至MS_Stage分区5

我最后为所有100个分区做这个,是否有一种快速的方式来并行切换所有的分区。

+1

没有。您将需要一个迭代过程(循环/光标)循环并执行每个命令。这显然是一个串行操作。你还必须记住swtich是一个元数据操作,所以并行运行并不会为你节省很多。 –

回答

2

不是我所知道的。我通常会做的是将开关置于循环中。类似这样的:

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