No lo hagas. Esto va junto con el consejo de nunca usar SELECT *, en cuyo caso ya que está enumerando todas las columnas, ¿por qué es importante su orden interna?
Dicho esto, si es absolutamente necesario, aquí hay una demostración que no deja caer la mesa. Sin embargo, las columnas deben abandonarse, ya que no puede insertar en el medio.
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
Se vuelve mucho más difícil una vez que tiene limitaciones y valores predeterminados.
¿Por qué tendrías que volver a crear la tabla y por qué te importa el orden de las columnas? –
Posibles duplicados: [Agregar una nueva columna de tabla a la posición ordinal específica] (http://stackoverflow.com/questions/769828/add-a-new-table-table-to-specific-ordinal-position), [Agregar columna en SQL Server en lugar específico?] (http://stackoverflow.com/questions/3968954/add-column-on-sql-server-on-specific-place) –
Gracias por los enlaces, sin embargo, todos mencionan la recreación de la tabla . – GordyII