2016-12-27 39 views
1

我使用的开关表的某个SQL Server 2008上的2个表之间快速传输数据,但我不知道它是如何工作的,这是什么的只是一个insert into T2 select * from T1之间的差异。alter table开关在sql server上如何工作?

有人能详细解释它是如何工作和区别?

而且我注意到,如果两个表都没有克隆这种说法是行不通的。例如,如果我在一个表中有一个索引,而不是另一个索引,则失败。使用语句

insert into T2 select * from T1 

载荷通过从T1将数据插入T2数据

+2

我没有看过在后端以肯定地说,但我知道'之开关由刚刚更新分区参考工作,而不是实际移动数据。而在你的例子中,它将把所有数据复制到一个新表中。 [相关的MSDN文章。](https://technet.microsoft.com/en-us/library/ms191160(v = sql.105).aspx) – Siyual

回答

4

插入数据。 当分区被转移(交换)时,数据没有物理移动;只有关于数据位置的元数据发生变化。

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

一般要求交换分区

当分区传送,数据没有物理移动;只有关于数据位置的元数据发生变化。之前,你可以切换分区,几个一般要求必须满足:开关操作之前

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

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

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

分区必须位于同一列。如果您将分区从一个分区表切换到另一个分区,则必须将这两个表分区到同一列。

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

这类资讯位于:

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

+0

好的答案!谢谢。 – Maik