Як змінити порядок стовпців у таблиці за допомогою SQL-запиту в SQL Server 2005?
Я хочу змінити порядок стовпців у таблиці за допомогою SQL-запиту.
Як змінити порядок стовпців у таблиці за допомогою SQL-запиту в SQL Server 2005?
Я хочу змінити порядок стовпців у таблиці за допомогою SQL-запиту.
Відповіді:
Ви не можете. Порядок стовпців - це просто "косметична" річ, про яку ми піклуємося - для SQL Server - це майже завжди абсолютно не має значення.
Що робить SQL Server Management Studio у фоновому режимі, коли ви змінюєте порядок стовпців, це відтворення таблиці з нуля за допомогою нової CREATE TABLE
команди, копіювання даних із старої таблиці та її видалення.
Немає команди SQL для визначення впорядкування стовпців.
INSERT
не чітко вказуючи стовпці!
Ви повинні чітко перелічити поля в тому порядку, коли ви хочете, щоб вони були повернені, а не використовувати * для замовлення "за замовчуванням".
оригінальний запит:
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
/ copy / drop
/ rename, на що відповідає komma8.komma1
Або ви можете скористатися SQL Server Management Studio
- У Провіднику об’єктів клацніть правою кнопкою миші таблицю зі стовпцями, які ви хочете змінити впорядкування, і натисніть Дизайн (Змінити в версії 2005 SP1 або новішої версії)
- Виберіть поле зліва від назви стовпця, яке ви хочете змінити. (Ви можете вибрати кілька стовпців, утримуючи клавіші [shift] або [ctrl] на клавіатурі.)
- Перетягніть стовпці в інше місце в межах таблиці.
Потім натисніть кнопку "Зберегти". Цей метод насправді скидає та відтворює таблицю, тому можуть виникнути деякі помилки.
Якщо змінити відстеження для бази даних та таблиці увімкнено параметр " ", не слід використовувати цей метод.
Якщо його вимкнено, в меню Інструменти> Опції> Дизайнери слід очистити зміни для збереження змін, які потребують опції відновлення таблиці , інакше виникне помилка "Збереження змін не дозволено" .
Проблеми можуть виникнути також під час створення первинних та зовнішніх ключів.
Якщо виникає будь-яка з перерахованих вище помилок, збереження не вдається, що залишає вас з початковим порядком стовпців.
This task cannot be performed using Transact-SQL statements.
" в документі була помилковою. Я пояснив автора і попросив його змінити його на " This task is not supported using Transact-SQL statements.
". Близько дня тому автор погодився і документ було виправлено. Ви можете слідкувати за дискусією, яку ми мали на GitHub .
Це схоже на питання про впорядкування записів у результаті запиту .. і, як правило, ніхто не любить формально правильну відповідь ;-)
Отже, ось що:
select *
не змушує повернути стовпці в певному порядкуcreate table' or in the
таблицю alter 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:
Інструменти -> Параметри -> Дизайнери -> Дизайнери таблиць і баз даних
Тоді:
Студія управління SQLServer видасть таблицю і відтворить її за допомогою даних.
Ви можете зробити це, створивши нову таблицю, скопіюйте всі дані, скиньте стару таблицю, а потім перейменуйте нову, щоб замінити стару.
Ви також можете додати нові стовпці до таблиці, скопіювати стовпчик за даними стовпців, скинути старі стовпці та перейменувати нові стовпці, щоб відповідати старим. Простий приклад нижче: 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:
Tools
-> Options
->Designers
->Table and Database Designers
Скасувати вибір Prevent saving changes that require table re-creation
.
Тепер ви можете упорядкувати таблицю.
Сервер Sql внутрішньо будує сценарій. Він створює тимчасову таблицю з новими змінами та копіює дані та видаляє поточну таблицю, а потім відтворює вставку таблиці з таблиці темп. Я знаходжу це у варіанті ssms 2014. "Створити сценарій зміни". Сценарій такий. Звідси : Як змінити порядок стовпців у таблиці за допомогою запиту 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
Якщо у вашому столі достатньо стовпців, ви можете спробувати це. Спочатку створіть нову таблицю з уподобаним порядком стовпців.
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;
Зрештою, ви просто не можете цього зробити в MS SQL. Нещодавно я створив таблиці на ходу (запуск програми), використовуючи збережену процедуру, що читається з таблиці пошуку. Коли я створив подання, яке поєднало їх з іншою таблицею, яку я створив раніше вручну (одна і та ж схема, з даними), це не вдалося - просто тому, що я використовував для перегляду '' Select * UNION Select * '. У той же час, якщо я використовую лише ті, що створені за допомогою збереженої процедури, я маю успіх.
На закінчення: Якщо є якась програма, яка залежить від порядку стовпця, це дійсно не добре програмування і напевно створить проблеми в майбутньому. Стовпці повинні "почувати себе вільними" будь-де та бути використаними для будь-якого процесу обробки даних (ВСТАВКА, ОНОВЛЕННЯ, ВИБІР).
Ви можете досягти цього за допомогою наступних кроків:
видаліть усі сторонні ключі та первинний ключ вихідної таблиці.
перейменувати оригінальну таблицю.
за допомогою CTAS створіть оригінальну таблицю в потрібному вам порядку.
скинути старий стіл.
застосувати всі обмеження до початкової таблиці
Якщо стовпці, які потрібно упорядкувати, нещодавно створені та порожні, то стовпці можна видалити та повторно додати у правильному порядку.
Це сталося зі мною, розширивши базу даних вручну, щоб додати нову функціональність, і я пропустив стовпчик, і коли я додав його, послідовність була неправильною.
Не знайшовши тут адекватного рішення, я просто виправив таблицю, використовуючи наступні команди.
ALTER TABLE tablename DROP COLUMN columnname;
ALTER TABLE tablename ADD columnname columntype;
Примітка. Робіть це лише в тому випадку, якщо у вас немає даних у стовпцях, які ви випадаєте.
Люди сказали, що порядок стовпців не має значення. Я регулярно використовую SQL Server Management Studio для "створення сценаріїв" для створення текстової версії схеми бази даних. Щоб ефективно керувати версіями цих скриптів (git) та порівнювати їх (WinMerge), необхідно, щоб вихід із сумісних баз даних був однаковим, а виділені відмінності - справжніми відмінностями в базі даних.
Порядок стовпців має значення; але просто деяким людям, не всім!
Я думаю, ви хочете додати новий стовпець у певному положенні. Ви можете створити новий стовпець, перемістивши поточні стовпці праворуч.
+---+---+---+
| A | B | C |
+---+---+---+
Видаліть усі індекси та посилання на закордонні ключі. Додайте новий стовпець із таким самим типом даних, як останній стовпець, і скопіюйте туди дані.
+---+---+---+---+
| A | B | C | C |
+---+---+---+---+
|___^
Змініть тип даних третього стовпця на такий же тип, як попередній стовпець, і скопіюйте туди дані.
+---+---+---+---+
| A | B | B | C |
+---+---+---+---+
|___^
Відповідно перейменуйте стовпці, відтворіть видалені індекси та посилання іноземних ключів.
+---+---+---+---+
| A | D | B | C |
+---+---+---+---+
Зміна типу даних другого стовпчика.
Майте на увазі, що порядок стовпців - це лише "косметична" річ, як сказано в marc_s .
Використовуйте
SELECT * FROM TABLE1
який відображає таблицю порядку стовпців за замовчуванням.
Якщо ви хочете змінити порядок стовпців.
Вкажіть ім'я стовпця для відповідного відображення
SELECT COLUMN1, COLUMN5, COLUMN4, COLUMN3, COULMN2 FROM TABLE1
Ви можете змінити це за допомогою SQL-запиту. Ось sql запит на зміну послідовності стовпця.
ALTER TABLE table name
CHANGE COLUMN `column1` `column1` INT(11) NOT NULL COMMENT '' AFTER `column2`;
Для того, щоб мати певний порядок стовпців, вам потрібно вибрати стовпчик за стовпцем у бажаному порядку. Порядок вибору диктує, як будуть упорядковані стовпці у висновку.
Спробуйте цю команду:
alter table students modify age int(5) first;
Це змінить вікове положення на перше.
змінити ім’я таблиці спочатку змінити ім'я стовпця int (5); приведе стовпець до першої зміни імені таблиці, змінить ім'я стовпця int (5) після (ім'я таблиці);
Приклад: Змінення позиції field_priority після field_price у статусі таблиці.
ALTER TABLE `status` CHANGE `priority` `priority` INT(11) NULL DEFAULT NULL AFTER `price`;