Добавление столбца между двумя другими столбцами в SQL-сервере - PullRequest
6 голосов
/ 16 марта 2011

Можете ли вы добавить столбец в таблицу, вставив его между двумя существующими столбцами в SQL Server без удаления и повторного создания таблицы?

Ответы [ 6 ]

7 голосов
/ 15 сентября 2014

Средне длинный ответ, да (да), но он уродлив, и вы, вероятно, не захотите это делать.

обратите внимание: этот код создает физическую таблицу

CREATE TABLE MyTest (a int, b int, d int, e int)

INSERT INTO MyTest (a,b,d,e) VALUES(1,2,4,5)

SELECT * FROM MyTest

ALTER TABLE MyTest ADD c int
ALTER TABLE MyTest ADD d_new int
ALTER TABLE MyTest ADD e_new int

UPDATE MyTest SET d_new = d, e_new = e

ALTER TABLE MyTest DROP COLUMN d
ALTER TABLE MyTest DROP COLUMN e

EXEC SP_RENAME 'MyTest.d_new', 'd';
EXEC SP_RENAME 'MyTest.e_new', 'e';

SELECT * FROM MyTest 

DROP TABLE MyTest
6 голосов
/ 16 марта 2011

Простой ответ - нет.Есть ли причина, по которой порядок столбцов важен для вас?

0 голосов
/ 06 июля 2017

Да, вы можете добавить сюда запрос для вашей проблемы:

ALTER table table_name ADD column column_name(new) datatype AFTER column_name
0 голосов
/ 16 марта 2011

Посмотрите по этой ссылке:

http://www.bobsgear.com/display/ts/Adding+Column+After+Another+Column+-+SQL+Server+2005

Как видите, ответ:

'невозможно без перемещения данных ввременная таблица '

, что на самом деле делает SQL Server Management Studio .

0 голосов
/ 16 марта 2011

Первый ответ, нет.

Второй ответ, согласно этой теме http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=58912, найдено с помощью Можно ли логически изменить порядок столбцов в таблице? , вы можете создать столбецзатем измените порядок столбцов в таблице, отредактировав системные таблицы.Но это выглядит невероятно грязно, и я бы не поверил, что все не сломается.

0 голосов
/ 16 марта 2011

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


в ответ на комментарии, да, это с помощью SQL Server Management Studio через пользовательский интерфейс и под капотомвы пытаетесь избежать удаления / воссоздания, поэтому нет, вы не можете сделать это, если сервер не сделает это за вас.

...