SQL Server 2008 R2 Добавить столбец в определенное место

Я использую SQL Server 2008 R2, и я хочу добавить новый столбец в определенное место в порядке столбцов в таблице, а не в конце. Я хочу избежать повторного создания таблицы. Как мне это сделать без воссоздания таблицы?

то есть.

Table: Bob
==========
   Col1
   Col2

Добавить новый столбец.

Table: Bob
==========
   Col1
   NewCol
   Col2

Ответ 1

Вы не можете. Столбец всегда добавляется в конце списка столбцов. Единственный способ изменить порядок - воссоздать таблицу с нуля.

При этом вам никогда не понадобится, каков фактический физический порядок столбцов и логический порядок определений столбцов. Если у вас есть зависимости от порядка столбцов, ваш код не работает. Если вы ожидаете повышения производительности от порядка столбцов, это мифы.

Ответ 2

Не делайте этого. Это согласуется с рекомендацией никогда не использовать 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

Это становится значительно сложнее, если у вас есть ограничения и значения по умолчанию.

Ответ 3

Я не видел script того, что вы пытаетесь сделать. Однако в SSMS (по крайней мере, в версии 10.5) вы можете щелкнуть правой кнопкой мыши по таблице в проводнике объектов и выбрать "Дизайн". Это позволяет вставить столбец в любом месте в порядке столбцов. Он также сохраняет вещи на вашем столе, такие как ссылки FK и т.д.

Я не исследовал, чтобы проверить, что SQL Server действительно делает за кулисами, и я не использую его для развертывания самостоятельно, но он есть.

Ответ 4

вы можете сделать это, щелкнув правой кнопкой мыши по таблице и перейдите к дизайну и измените порядок, перетащив его.