2016-12-27 38 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