SQL: Изменение последовательности столбцов
Порядок следования полей в SQL-таблице тебя не должен волновать. Ты всегда можешь изменить порядок полей в SELECT-запросе, которым делаешь выборку.
Запрос SELECT * плох, в частности, тем, что ты не управляешь порядком полей.
Предлагаемое решение 1: добавь колонку в конец, замени все звездочки в запросах на списки интересующих тебя полей. При этом в запрос заполнения таблицы ARCHIVE_TEST можно как включать новое поле ID, так и не включать.
Предлагаемое решение 2: вставить поле предпоследним (создать другую таблицу с правильным порядком полей, перекинуть в нее данные, удалить старую, переименовать новую). Это автоматически умеет делать, скажем, SQL Management Studio. Но если много данных, то не рекомендую их так гонять.
А потом проделать ту же операцию и с архивной таблицей.
Запрос SELECT * плох, в частности, тем, что ты не управляешь порядком полей.
Предлагаемое решение 1: добавь колонку в конец, замени все звездочки в запросах на списки интересующих тебя полей. При этом в запрос заполнения таблицы ARCHIVE_TEST можно как включать новое поле ID, так и не включать.
Предлагаемое решение 2: вставить поле предпоследним (создать другую таблицу с правильным порядком полей, перекинуть в нее данные, удалить старую, переименовать новую). Это автоматически умеет делать, скажем, SQL Management Studio. Но если много данных, то не рекомендую их так гонять.
А потом проделать ту же операцию и с архивной таблицей.
> замени все звездочки в запросах на списки интересующих тебя полей
тиран! деспот!
тиран! деспот!
Хм, в мускулях есть инструкции вида:
В MSSQL точно ничего такого нет?
ALTER TABLE mytable MODIFY COLUMN colname int(11) DEFAULT 42 AFTER anothercolname;
ALTER TABLE mytable MODIFY COLUMN colname2 varchar(256) NOT NULL FIRST;
ALTER TABLE mytable CHANGE COLUMN colname colname int(11) DEFAULT 42 AFTER anothercolname;
ALTER TABLE mytable CHANGE COLUMN colname2 colname2 varchar(256) NOT NULL FIRST;
В MSSQL точно ничего такого нет?
В MSSQL точно ничего такого нет?ТС это и делает. но управляющая консоль предупреждает, что добавление колонки влечет за собой изменение ширины строки таблицы, и что применение такого изменения будет делаться через скрытое создание новой таблицы и копирования в нее имеющихся данных, если таблица большая, то это может занять долгое время, при этом на большее время изменения будет заблокирован доступ на таблицу, что приведет к отказу в обслуживании на это время, что чревато - если это production-база.
пытаюсь применить опцию Design (по нажатии правой клавиши мыши но сохранить изменения SQL не даёт, пишет "... must be re-created ..."зайди в настройки и сними галку
с Tools -> Options -> Designers -> Prevent saving changes that require table re-creation
Здорово! Работает, спасибо огромное!
P.S. Раз это так просто, это случайно ничем не чревато?
P.S. Раз это так просто, это случайно ничем не чревато?
P.S. Раз это так просто, это случайно ничем не чревато?если таблица большая: сотни МБ и больше, то это может занять достаточно длительное время
чревато - если это production-базаЕсли у Флосси есть доступ к production, то это само по себе чревато...
Оставить комментарий
maximovega
Можно безболезненно изменить последователность столбцов в такой ситуации?К табличке придаётся дополнительный столбец, притом хотелось бы его вставить перед последним столбцом (таблица содержит результаты вычислений и даты проведения вычислений записываются в последний столбец: изменение последовательности смотрится по меньшей мере неэстетично (и нелогично также.
После
ALTER TABLE [FinTools].[dbo].[TEST]
ADD [ID] Int
пытаюсь применить опцию Design (по нажатии правой клавиши мыши но сохранить изменения SQL не даёт, пишет "... must be re-created ..."
Eщё ситуация осложняется последующим использованием архивной таблицы:
INSERT INTO [FinTools].[dbo].[ARCHIVE_TEST] SELECT * FROM [TEST]
Нужно будет добавить столбец там? Если да, то тоже с той же последовательностью? И всё ли это, что потребуется изменить в отношении архивной таблицы после изменений во временной?