我正在使用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