Как изменить порядок столбцов в таблице с помощью SQL-запроса в SQL Server 2005?
Я хочу изменить порядок столбцов в таблице с помощью SQL-запроса.
Как изменить порядок столбцов в таблице с помощью SQL-запроса в SQL Server 2005?
Я хочу изменить порядок столбцов в таблице с помощью SQL-запроса.
Вы не можете. Порядок столбцов - это просто "косметическая" вещь, о которой мы заботимся, - к SQL Server, она почти всегда абсолютно неактуальна.
Что делает SQL Server Management Studio в фоновом режиме, когда вы меняете порядок столбцов, воссоздаете таблицу с нуля с помощью новой команды CREATE TABLE
, копируя данные из старой таблицы и отбрасывая ее.
Нет команды SQL для определения упорядочения столбцов.
Вам нужно явно указать поля в том порядке, в котором вы хотите, чтобы они были возвращены вместо использования * для порядка по умолчанию.
исходный запрос:
select * from foobar
возвращает
foo bar
--- ---
1 2
теперь пишите
select bar, foo from foobar
bar foo
--- ---
2 1
Согласно http://msdn.microsoft.com/en-us/library/aa337556.aspx
Эта задача не может быть выполнена с помощью операторов Transact-SQL.
Ну, может быть, с помощью create
/копировать/drop
/переименовывать, а ответил komma8.komma1
Или вы можете использовать SQL Server Management Studio
- В обозревателе объектов щелкните правой кнопкой мыши таблицу со столбцами, для которой необходимо изменить порядок, и выберите " Дизайн" (Изменить в версии 2005 с пакетом обновления 1 (SP1) или более ранней версии).
- Установите флажок слева от названия столбца, который вы хотите изменить. (Вы можете выбрать несколько столбцов, удерживая клавиши [shift] или [ctrl] на клавиатуре.)
- Перетащите столбец (столбцы) в другое место в таблице.
Затем нажмите Сохранить. Этот метод фактически удаляет и воссоздает таблицу, поэтому могут возникнуть некоторые ошибки.
Если опция отслеживания изменений включена для базы данных и таблицы, вам не следует использовать этот метод.
Если этот параметр отключен, то параметр " Запретить сохранение изменений, для которого требуется параметр пересоздания таблицы", следует очистить в меню "Инструменты"> "Параметры"> "Дизайнеры", в противном случае произойдет ошибка "Сохранение изменений не разрешено".
Проблемы могут также возникнуть при создании первичного и внешнего ключей.
Если возникает какая-либо из перечисленных выше ошибок, сохранение не удается, что оставляет исходный порядок столбцов.
Это похоже на вопрос о упорядочении записей в результате запроса.. и обычно никто не любит формально правильный ответ; -)
Итак, вот оно:
select *
не заставляет столбцы возвращаться в определенном порядкеcreate table' or in the
alter add add), либо Вы можете, конечно, изменить порядок столбцов в инструкции 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
- - -
В SQLServer Management Studio:
Инструменты → Параметры → Дизайнеры → Дизайнеры таблиц и баз данных
Тогда:
Студия SQLServer Management удалит таблицу и воссоздает ее с использованием данных.
Вы можете сделать это, создав новую таблицу, скопировав все данные, отбросив старую таблицу, а затем переименовав новую, чтобы заменить старую.
Вы также можете добавить новые столбцы в таблицу, скопировать данные столбца за столбцом, удалить старые столбцы, а затем переименовать новые столбцы, чтобы они соответствовали старым. Простой пример ниже: 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
В SQLServer Management Studio:
Сервис → Параметры → Дизайнеры → Дизайнеры таблиц и баз данных
Снимите флажок "Запретить сохранение изменений, которые требуют пересоздания таблицы".
Теперь вы можете изменить порядок таблицы.
Если в таблице достаточно столбцов, вы можете попробовать это. Сначала создайте новую таблицу с предпочтительным порядком столбцов.
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;
Сервер 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
В конце дня вы просто не можете сделать это в MS SQL. Недавно я создал таблицы на ходу (запуск приложения) с помощью хранимой процедуры, которая читается из таблицы поиска. Когда я создал представление, которое объединило их с другой таблицей, которую я создал вручную ранее (одна и та же схема с данными), она не удалась - просто потому, что я использовал "Select * UNION Select *" для представления. В то же время, если я использую только те, которые создаются с помощью хранимой процедуры, я успешный.
В заключение: если есть какое-либо приложение, которое зависит от порядка столбца, это действительно плохое программирование и наверняка создаст проблемы в будущем. Столбцы должны "чувствовать себя" свободно в любом месте и использоваться для любого процесса обработки данных (INSERT, UPDATE, SELECT).
Вы можете изменить это с помощью SQL-запроса. Вот запрос sql для изменения последовательности столбцов.
ALTER TABLE table name
CHANGE COLUMN `column1` `column1` INT(11) NOT NULL COMMENT '' AFTER `column2`;
Вы можете достичь этого с помощью следующих шагов:
удалить все внешние ключи и первичный ключ исходной таблицы.
переименуйте исходную таблицу.
используя CTAS, создайте исходную таблицу в том порядке, в котором вы хотите.
удалить старую таблицу.
применить все ограничения к исходной таблице
Если столбцы, которые будут переупорядочены, были недавно созданы и пусты, то столбцы могут быть удалены и повторно добавлены в правильном порядке.
Это случилось со мной, расширив базу данных вручную, чтобы добавить новую функциональность, и я пропустил колонку, и когда я добавил ее, последовательность была неправильной.
После нахождения адекватного решения здесь я просто скорректировал таблицу, используя команды следующего вида.
ALTER TABLE tablename DROP COLUMN columnname;
ALTER TABLE tablename ADD columnname columntype;
Примечание: сделайте это только в том случае, если у вас нет данных в столбцах, которые вы бросаете.
Люди сказали, что порядок столбцов не имеет значения. Я регулярно использую SQL Server Management Studio "сгенерировать скрипты" для создания текстовой версии схемы базы данных. Чтобы эффективно контролировать эти сценарии (git) и сравнивать их (WinMerge), крайне важно, чтобы выход из совместимых баз данных был одинаковым, а выделенные различия были подлинными различиями в базе данных.
Порядок столбцов имеет значение; но только для некоторых людей, а не для всех!
Для того, чтобы иметь определенный порядок столбцов Вам нужно выбрать столбец за столбцом в том порядке, который Вы хотите. Порядок выбора определяет порядок упорядочения столбцов при выводе.
Попробуйте эту команду:
alter table students modify age int(5) first;
Это изменит позицию возраста на первую позицию.
Как обновить новый столбец в нужном месте, т.е. по умолчанию это новый добавленный столбец, который обновляется в последнем столбце, но я хочу, чтобы он был добавлен между существующими столбцами
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
Может кто-то помочь мне с этим? (как вставить новый добавленный столбец между существующими столбцами)
Использование
SELECT * FROM TABLE1
который отображает порядок столбцов по умолчанию в таблице.
Если вы хотите изменить порядок столбцов.
Укажите имя столбца для отображения соответственно
SELECT COLUMN1, COLUMN5, COLUMN4, COLUMN3, COULMN2 FROM TABLE1
вы можете использовать индексирование. После индексирования, если select * from XXXX результаты должны быть в соответствии с индексом, но только результат set.. not structrue of Table
изменить имя таблицы сначала изменить имя столбца int (5); приведет столбец к первому изменить имя таблицы изменить имя столбца int (5) после (имя_таблицы);
Пример: измените положение field_priority после поля_цены в состоянии таблицы.
ALTER TABLE `status` CHANGE `priority` `priority` INT(11) NULL DEFAULT NULL AFTER `price`;