Gor*_*yII 13 t-sql sql-server sql-server-2008
我正在使用SQL Server 2008 R2,我希望在表中的列顺序中将新列添加到特定位置,而不是在末尾.我希望避免重新创建表格.如何在不重新创建表的情况下执行此操作?
即
Table: Bob
==========
Col1
Col2
Run Code Online (Sandbox Code Playgroud)
添加新列.
Table: Bob
==========
Col1
NewCol
Col2
Run Code Online (Sandbox Code Playgroud)
Rem*_*anu 19
你不能.列始终添加在列列表的末尾.更改顺序的唯一方法是从头开始重新创建表.
话虽如此,对于你来说,列的实际物理顺序和列定义的逻辑顺序永远不应该是重要的.如果您对列顺序有依赖性,那么您的代码就会被破坏.如果您希望从列顺序中获得性能提升,则这些都是神话.
不要这样做.这与建议永远不使用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
Run Code Online (Sandbox Code Playgroud)
一旦遇到约束和默认值,它就会变得非常困难.