alter table switch如何在sql server上运行?

时间:2016-12-27 16:15:03

标签: sql-server sql-server-2008

我在SQL Server 2008上的某个时候使用切换表来快速传输2个表之间的数据,但我不知道它是如何工作的,这只是一个insert into T2 select * from T1之间有什么区别。

有人可以详细解释它的工作原理和差异吗?

此外,我注意到如果两个表都不是克隆,则此语句不起作用。例如,如果我在一个表中有一个索引而在另一个表中没有,则失败。

1 个答案:

答案 0 :(得分:11)

使用声明

插入数据
insert into T2 select * from T1

通过将数据从T1插入T2来加载数据。 传输(切换)分区时,数据不会物理移动;只有关于数据位置的元数据才会发生变化。

在切换分区之前,必须满足几个一般要求:

切换分区的一般要求

传输分区时,数据不会物理移动;只有关于数据位置的元数据才会发生变化。在切换分区之前,必须满足几个一般要求:

两个表必须在SWITCH操作之前存在。在执行切换操作之前,数据库中必须存在要从中移动分区的表(源表)和接收分区的表(目标表)。

接收分区必须存在且必须为空。无论是将表作为分区添加到已存在的分区表,还是将分区从一个分区表移动到另一个分区表,接收新分区的分区必须存在且必须是空分区。

接收的非分区表必须存在且必须为空。如果要重新分配分区以形成一个非分区表,则接收新分区的表必须存在且必须是空的非分区表。

分区必须位于同一列。如果要将分区从一个分区表切换到另一个分区表,则必须在同一列上对这两个表进行分区。

源表和目标表必须共享同一文件组。 ALTER TABLE ... SWITCH语句的源表和目标表必须位于同一文件组中,并且它们的大值列必须存储在同一文件组中。任何相应的索引,索引分区或索引视图分区也必须位于同一文件组中。但是,文件组可以与相应表或其他相应索引的文件组不同。

此信息及更多信息位于此处:

https://technet.microsoft.com/en-us/library/ms191160(v=sql.105).aspx