我正在使用SQL Server 2008 R2,並且希望將新列添加到表中列順序中的特定位置,而不是末尾。我希望避免重新創建表格。如何在不重新創建表的情況下執行此操作?SQL Server 2008 R2將列添加到特定位置
即
Table: Bob
==========
Col1
Col2
添加新列。
Table: Bob
==========
Col1
NewCol
Col2
我正在使用SQL Server 2008 R2,並且希望將新列添加到表中列順序中的特定位置,而不是末尾。我希望避免重新創建表格。如何在不重新創建表的情況下執行此操作?SQL Server 2008 R2將列添加到特定位置
即
Table: Bob
==========
Col1
Col2
添加新列。
Table: Bob
==========
Col1
NewCol
Col2
你不行。列總是添加在列列表的末尾。更改順序的唯一方法是從頭開始重新創建表。這就是說,它永遠不應該影響到什麼是列的實際物理順序,也不是列定義的邏輯順序。如果你對列順序有依賴性,你的代碼就會被破壞。如果你期望從列順序中獲得性能上的提升,那就是神話。
不要這樣做。這與建議永遠不要使用SELECT *一起使用,在這種情況下,因爲您列出所有列,爲什麼它們的內部順序很重要?
也就是說,如果你絕對必須,這裏是一個演示,不會刪除表。列必須被刪除,因爲你不能在中間插入。
create table BOB(col1 int, colspace int, col2 int, col3 varchar(10))
insert BOB values (1,3, 2,'test')
;
alter table BOB add col2_copy int, col3_copy varchar(10), NewCol datetime
;
update BOB set col2_copy = col2, col3_copy = col3
;
alter table BOB drop column col2
alter table BOB drop column col3
;
alter table BOB add col2 int, col3 varchar(10)
;
update BOB set col2 = col2_copy, col3 = col3_copy
;
alter table BOB drop column col2_copy
alter table BOB drop column col3_copy
;
select * from BOB
一旦你有約束和默認參與,它變得更加困難。
我沒有看到腳本您正在嘗試做什麼。但是,在SSMS中(至少在10.5版本中),您可以右鍵單擊對象資源管理器中的表格,然後選擇「設計」。這允許您在列順序的任何位置插入一列。它還保留了你的桌面上的東西,如FK參考等。
我還沒有研究過驗證SQL Server實際上是在幕後做什麼,我不使用它來展示自己,但它在那裏。
您可以通過右鍵單擊表格並進行設計並通過拖放來更改順序。
爲什麼你需要重新創建表格,爲什麼列順序對你很重要? – 2011-02-15 02:50:28
可能的重複:[添加一個新的表列到特定的序號位置](http://stackoverflow.com/questions/769828/add-a-new-table-column-to-specific-ordinal-position),[添加列在特定的地方SQL Server上?](http://stackoverflow.com/questions/3968954/add-column-on-sql-server-on-specific-place) – 2011-02-15 02:57:19
感謝您的鏈接,但他們都提到重新創建表。 – GordyII 2011-02-15 03:12:44