使用SQL Server的分区功能,可以用最少的工作或最小开销在不同的表之间转移分区。可以使用ALTER TABLE...SWITCH在表之间转移分区。转移能以3种方式进行:
- 从一个已分区的表转移一个分区到另外一个已分区的表(都需要对同一列进行分区)
- 转移整个未分区的表到一个已分区的表,
- 从一个已分区的表移动一个分区到一个未分区的表。
在SQL Server 2005中,不能在绑定了架构的视图中引用分区表,也不允许使用索引视图.SQL Server 2008支持架构绑定和分区索引视图.
在表之间切换分区的基本语法如下:
ALTER TABLE tablename
SWITCH [ PARTITlON source_partition_number_expression )
TO [ schema_name.] target_table
[ PARTITION target_partition_number_expression]
ALTER TABLE...SWITCH参数
参 数 | 描 述 |
tablename | 要移动分区的源表 |
source_partition_number_expression | 要重新分配的分区号 |
[ schema_name.] target_table | 接收分区的目标表 |
PARTITION target_partition_number_expression | 目标分区号 |
例如,在Sales.WebSiteHits表和一个叫做Sales.WebSiteHitsHistory的新表之间移动分区。第一步是创建一个新表来保存历史网站点击信息:
CREATE TABLE Sales.WebSiteHitsHistory
(
WebSiteHitID bigint NOT NULL IDENTITY(1,1),
WebSitePage varchar(255) NOT NULL,
HitDate datetime NOT NULL
CONSTRAINT PK_WebSiteHitsHistory
PRIMARY KEY (WebSiteHitID,HitDate)
)
ON [HitDateRangeScheme] (HitDate)
--然后,使用ALTER TABLE把Sales.WebSiteHits表的3号分区转移到新表Salles.WebSiteHitsHistory
--的3号分区中
ALTER TABLE Sales.WebSiteHits SWITCH PARTITION 3
TO Sales.WebSiteHitsHistory PARTITION 3
--接着,使用$PARTITION执行查询来查看转移到新表巾的数据:
SELECT HitDate,$PARTITION.HitDateRange (HitDate) Partition
FROM Sales.WebSiteHitsHistory
在表之间转移分区比手动执行行操作(例如INSERT_S卧ECT)快很多,凶为并小是真正移动物理数据,只是修改了有关分区目前保存在哪里的元数据。同样要记住,任何既有表的目标分区必须是空的才能作为目的分区。如果它是一个未分区的表,它也必须是空的。