Запрос SQL для добавления нового столбца после существующего столбца в SQL Server 2005 - PullRequest
41 голосов
/ 19 января 2011

Мне нужен SQL-запрос, который добавляет новый столбец после существующего столбца, поэтому столбец будет добавлен в определенном порядке.

Пожалуйста, предложите мне, если есть запрос ALTER, который это делает.

Ответы [ 7 ]

36 голосов
/ 19 января 2011

Microsoft SQL (AFAIK) не позволяет изменять таблицу и добавлять столбец после определенного столбца.Лучше всего использовать Sql Server Management Studio или поиграть с удалением и повторным добавлением таблицы или созданием новой таблицы и перемещением данных вручную.ни один не очень изящен.

MySQL делает, однако:

ALTER TABLE mytable
ADD COLUMN  new_column <type>
AFTER       existing_column
20 голосов
/ 19 января 2011

ALTER не будет этого делать, потому что порядок столбцов не имеет значения для хранения или запросов

Если SQL Server, вам придется использовать конструктор таблиц SSMS для упорядочения столбцов,который затем может сгенерировать скрипт, который удаляет и воссоздает таблицу

Редактировать июнь 2013

Перекрестная ссылка на мой ответ здесь: Влияние на производительность / пространство при заказе столбцов SQL Server?

14 голосов
/ 03 июня 2014

Это возможно.

Во-первых, просто добавьте каждый столбец обычным способом (как в последнем столбце).

Во-вторых, в SQL Server Management Studio Войдите в Инструменты => Параметры.

В разделе 'ДизайнерыВ меню «Tab =>« Дизайнеры таблиц и баз данных »снимите флажок« Запретить сохранение изменений, требующих пересоздания таблицы ».

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

Не забудьте сохранить.

3 голосов
/ 19 января 2011

Если вы хотите изменить порядок столбцов на сервере SQL, в настоящее время нет прямого способа сделать это в SQL Server.

Взгляните на http://blog.sqlauthority.com/2008/04/08/sql-server-change-order-of-column-in-database-tables/

Вы можете изменить порядок при редактировании дизайна для таблицы.

2 голосов
/ 28 февраля 2017

Сначала добавьте новый столбец в старую таблицу через SSMStudio.Перейти в базу данных >> таблица >> столбцы.Щелкните правой кнопкой мыши по столбцам и выберите новый столбец .Следуй за волшебником.Затем создайте новую таблицу со столбцами, упорядоченными по желанию, следующим образом:

select * into my_new_table from (
select old_col1, my_new_col, old_col2, old_col3
from my_old_table 
) as A
;

Затем переименуйте таблицы по желанию через SSMStudio.Перейти в базу данных >> таблица >> выбрать переименовать.

0 голосов
/ 02 апреля 2018

Для MS SQL Server, ALTER TABLE tablename ADD columnname INT будет работать.Конечно, невозможно добавить столбец после определенного столбца, как в MySQL, с помощью команды after.

0 голосов
/ 10 января 2018

Плохо выбирать * из всего, точка.Вот почему SSMS добавляет каждое имя поля, даже если их сотни, вместо select *.Это крайне неэффективно независимо от размера таблицы.Если вы не знаете, что это за поля, еще эффективнее извлечь их из базы данных INFORMATION_SCHEMA, чем выбрать *.

Лучший запрос будет:

SELECT 
 COLUMN_NAME, 
 Case 
  When DATA_TYPE In ('varchar', 'char', 'nchar', 'nvarchar', 'binary') 
  Then convert(varchar(MAX), CHARACTER_MAXIMUM_LENGTH)  
  When DATA_TYPE In ('numeric', 'int', 'smallint', 'bigint', 'tinyint') 
  Then convert(varchar(MAX), NUMERIC_PRECISION) 
  When DATA_TYPE = 'bit' 
  Then convert(varchar(MAX), 1)
  When DATA_TYPE IN ('decimal', 'float') 
  Then convert(varchar(MAX), Concat(Concat(NUMERIC_PRECISION, ', '), NUMERIC_SCALE)) 
  When DATA_TYPE IN ('date', 'datetime', 'smalldatetime', 'time', 'timestamp') 
  Then '' 
 End As DATALEN, 
 DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS 
Where 
 TABLE_NAME = ''
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...