Как изменить порядок столбцов в таблице с использованием SQL-запроса в SQL Server 2005?

Как изменить порядок столбцов в таблице с помощью SQL-запроса в SQL Server 2005?

Я хочу изменить порядок столбцов в таблице с помощью SQL-запроса.

Ответ 1

Вы не можете. Порядок столбцов - это просто "косметическая" вещь, о которой мы заботимся, - к SQL Server, она почти всегда абсолютно неактуальна.

Что делает SQL Server Management Studio в фоновом режиме, когда вы меняете порядок столбцов, воссоздаете таблицу с нуля с помощью новой команды CREATE TABLE, копируя данные из старой таблицы и отбрасывая ее.

Нет команды SQL для определения упорядочения столбцов.

Ответ 2

Вам нужно явно указать поля в том порядке, в котором вы хотите, чтобы они были возвращены вместо использования * для порядка по умолчанию.

исходный запрос:

select * from foobar

возвращает

foo bar
--- ---
  1   2

теперь пишите

select bar, foo from foobar

bar foo
--- ---
  2   1

Ответ 3

Согласно http://msdn.microsoft.com/en-us/library/aa337556.aspx

Эта задача не может быть выполнена с помощью операторов Transact-SQL.

Ну, может быть, с помощью create/копировать/drop/переименовывать, а ответил komma8.komma1

Или вы можете использовать SQL Server Management Studio

  1. В обозревателе объектов щелкните правой кнопкой мыши таблицу со столбцами, для которой необходимо изменить порядок, и выберите " Дизайн" (Изменить в версии 2005 с пакетом обновления 1 (SP1) или более ранней версии).
  2. Установите флажок слева от названия столбца, который вы хотите изменить. (Вы можете выбрать несколько столбцов, удерживая клавиши [shift] или [ctrl] на клавиатуре.)
  3. Перетащите столбец (столбцы) в другое место в таблице.

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

Если опция отслеживания изменений включена для базы данных и таблицы, вам не следует использовать этот метод.

Если этот параметр отключен, то параметр " Запретить сохранение изменений, для которого требуется параметр пересоздания таблицы", следует очистить в меню "Инструменты"> "Параметры"> "Дизайнеры", в противном случае произойдет ошибка "Сохранение изменений не разрешено".

  • Microsoft настоятельно рекомендует отключить параметр Запретить сохранение изменений, для которых требуется повторное создание таблицы, так как это приводит к удалению существующей информации об отслеживании изменений при повторном создании таблицы, поэтому никогда не следует отключать этот параметр, если отслеживание изменений включен!

Проблемы могут также возникнуть при создании первичного и внешнего ключей.

Если возникает какая-либо из перечисленных выше ошибок, сохранение не удается, что оставляет исходный порядок столбцов.

Ответ 4

Это похоже на вопрос о упорядочении записей в результате запроса.. и обычно никто не любит формально правильный ответ; -)

Итак, вот оно:

  • в соответствии со стандартом SQL, столбцы в таблице не "упорядочены"
  • в результате, select * не заставляет столбцы возвращаться в определенном порядке
  • как правило, каждая RDBMS имеет своего рода "по умолчанию" порядок (обычно порядок, в который столбцы были добавлены в таблицу, либо в таблице create table' or in the alter add add), либо
  • поэтому, если вы полагаетесь на порядок столбцов (потому что вы используете результаты запроса, чтобы заглушить какую-либо другую структуру данных из позиции столбцов), явным образом перечисляю столбцы в том порядке, в котором вы хотите.

Ответ 5

Вы можете, конечно, изменить порядок столбцов в инструкции sql. Однако, если вы хотите абстрагировать порядок столбцов таблицы, вы можете создать представление. то есть

CREATE TABLE myTable(
    a int NULL,
    b varchar(50) NULL,
    c datetime NULL
);


CREATE VIEW vw_myTable
AS
SELECT c, a, b
  FROM myTable;

select * from myTable;
a  b  c
-  -  -

select * from vw_myTable
c  a  b
-  -  -

Ответ 6

В SQLServer Management Studio:

Инструменты → Параметры → Дизайнеры → Дизайнеры таблиц и баз данных

  • Отменить выбор "Предотвратить сохранение изменений, требующих повторного создания таблицы".

Тогда:

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

Студия SQLServer Management удалит таблицу и воссоздает ее с использованием данных.

Ответ 7

Вы можете сделать это, создав новую таблицу, скопировав все данные, отбросив старую таблицу, а затем переименовав новую, чтобы заменить старую.

Вы также можете добавить новые столбцы в таблицу, скопировать данные столбца за столбцом, удалить старые столбцы, а затем переименовать новые столбцы, чтобы они соответствовали старым. Простой пример ниже: http://sqlfiddle.com/#!3/67af4/1

CREATE TABLE TestTable (
    Column1 INT,
    Column2 VARCHAR(255)
);
GO

insert into TestTable values(1, 'Test1');
insert into TestTable values(2, 'Test2');
GO

select * from TestTable;
GO

ALTER TABLE TestTable ADD Column2_NEW VARCHAR(255);
ALTER TABLE TestTable ADD Column1_NEW INT;
GO

update TestTable 
set Column1_NEW = Column1, 
    Column2_NEW = Column2;
GO

ALTER TABLE TestTable DROP COLUMN Column1;
ALTER TABLE TestTable DROP COLUMN Column2;
GO

sp_rename 'TestTable.Column1_NEW', 'Column1', 'COLUMN';
GO
sp_rename 'TestTable.Column2_NEW', 'Column2', 'COLUMN';
GO

select * from TestTable;
GO

Ответ 8

В SQLServer Management Studio:

Сервис → Параметры → Дизайнеры → Дизайнеры таблиц и баз данных

Снимите флажок "Запретить сохранение изменений, которые требуют пересоздания таблицы".

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

Ответ 9

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

    create table new as select column1,column2,column3,....columnN from table_name;

Теперь отбросьте таблицу с помощью команды drop

    drop table table_name;

теперь переименуйте вновь созданную таблицу в свое старое имя таблицы.

    rename new to table_name;

теперь выберите таблицу, у вас есть свои переупорядоченные столбцы, как вам было раньше.

    select * from table_name;

Ответ 10

Сервер Sql внутренне создает script. Он создает временную таблицу с новыми изменениями и копирует данные и отбрасывает текущую таблицу, а затем воссоздает вставку таблицы из таблицы temp. Я нахожу это из опции "Generate Change script" ssms 2014. Script как это. Из Здесь: как изменить порядок столбцов в таблице с помощью SQL-запроса

BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_emps
    (
    id int NULL,
    ename varchar(20) NULL
    )  ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_emps SET (LOCK_ESCALATION = TABLE)
GO
IF EXISTS(SELECT * FROM dbo.emps)
     EXEC('INSERT INTO dbo.Tmp_emps (id, ename)
        SELECT id, ename FROM dbo.emps WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.emps
GO
EXECUTE sp_rename N'dbo.Tmp_emps', N'emps', 'OBJECT' 
GO
COMMIT

Ответ 11

В конце дня вы просто не можете сделать это в MS SQL. Недавно я создал таблицы на ходу (запуск приложения) с помощью хранимой процедуры, которая читается из таблицы поиска. Когда я создал представление, которое объединило их с другой таблицей, которую я создал вручную ранее (одна и та же схема с данными), она не удалась - просто потому, что я использовал "Select * UNION Select *" для представления. В то же время, если я использую только те, которые создаются с помощью хранимой процедуры, я успешный.

В заключение: если есть какое-либо приложение, которое зависит от порядка столбца, это действительно плохое программирование и наверняка создаст проблемы в будущем. Столбцы должны "чувствовать себя" свободно в любом месте и использоваться для любого процесса обработки данных (INSERT, UPDATE, SELECT).

Ответ 12

Вы можете изменить это с помощью SQL-запроса. Вот запрос sql для изменения последовательности столбцов.

ALTER TABLE table name 
CHANGE COLUMN `column1` `column1` INT(11) NOT NULL COMMENT '' AFTER `column2`;

Ответ 13

Вы можете достичь этого с помощью следующих шагов:

  • удалить все внешние ключи и первичный ключ исходной таблицы.

  • переименуйте исходную таблицу.

  • используя CTAS, создайте исходную таблицу в том порядке, в котором вы хотите.

  • удалить старую таблицу.

  • применить все ограничения к исходной таблице

Ответ 14

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

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

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

ALTER TABLE  tablename  DROP COLUMN  columnname; 
ALTER TABLE  tablename  ADD columnname columntype;

Примечание: сделайте это только в том случае, если у вас нет данных в столбцах, которые вы бросаете.

Люди сказали, что порядок столбцов не имеет значения. Я регулярно использую SQL Server Management Studio "сгенерировать скрипты" для создания текстовой версии схемы базы данных. Чтобы эффективно контролировать эти сценарии (git) и сравнивать их (WinMerge), крайне важно, чтобы выход из совместимых баз данных был одинаковым, а выделенные различия были подлинными различиями в базе данных.

Порядок столбцов имеет значение; но только для некоторых людей, а не для всех!

Ответ 15

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

Ответ 16

Попробуйте эту команду:

alter table students modify age int(5) first; 

Это изменит позицию возраста на первую позицию.

Ответ 17

Как обновить новый столбец в нужном месте, т.е. по умолчанию это новый добавленный столбец, который обновляется в последнем столбце, но я хочу, чтобы он был добавлен между существующими столбцами

Table1

Rollno Marks 
1        50    
2        60

alter table #Table1 add Name varchar(200)

update A 
  Set A.Name=B.Studentname.

from #table1 A
left join Studentsdetails_tbl B

Default
Rollno Marks Name

Required
Rollno  Name Marks

Может кто-то помочь мне с этим? (как вставить новый добавленный столбец между существующими столбцами)

Ответ 18

Использование

SELECT * FROM TABLE1

который отображает порядок столбцов по умолчанию в таблице.

Если вы хотите изменить порядок столбцов.

Укажите имя столбца для отображения соответственно

SELECT COLUMN1, COLUMN5, COLUMN4, COLUMN3, COULMN2 FROM TABLE1

Ответ 19

вы можете использовать индексирование. После индексирования, если select * from XXXX результаты должны быть в соответствии с индексом, но только результат set.. not structrue of Table

Ответ 20

изменить имя таблицы сначала изменить имя столбца int (5); приведет столбец к первому изменить имя таблицы изменить имя столбца int (5) после (имя_таблицы);

Ответ 21

Пример: измените положение field_priority после поля_цены в состоянии таблицы.

ALTER TABLE `status` CHANGE `priority` `priority` INT(11) NULL DEFAULT NULL AFTER `price`;