Могу ли я логически изменить порядок столбцов в таблице?

Если я добавляю столбец в таблицу в Microsoft SQL Server, могу ли я контролировать, где столбец логически отображается в запросах?

Я не хочу связываться с физическим расположением столбцов на диске, но я хотел бы, когда это возможно, логически группировать столбцы, чтобы такие инструменты, как SQL Server Management Studio, отображали содержимое таблицы удобным способом.

Я знаю, что могу сделать это через SQL Management Studio, перейдя в режим «конструирования» для таблиц и перетаскивая порядок столбцов вокруг, но я хотел бы иметь возможность сделать это в необработанном SQL, чтобы я мог выполнять упорядочение Скрипт из командной строки.

4.08.2008 21:37:31
Слишком поздно для ответа, но посмотрите на эту ссылку. blog.sqlauthority.com/2013/03/11/…
sqluser 15.01.2015 23:43:33
Tim Abell 6.08.2015 18:12:14
Tim Abell 6.08.2015 18:15:06
и еще один связанный с этим вопрос, о том, имеет ли это значение stackoverflow.com/questions/6692021/…
Tim Abell 6.08.2015 18:20:55
microsoft connect: синтаксис ALTER TABLE для изменения порядка столбцов - ответ, как обычно, состоит из разновидности шоколадного чайника WONTFIX
Tim Abell 6.08.2015 20:43:55
8 ОТВЕТОВ
РЕШЕНИЕ

Вы не можете сделать это программно (безопасным способом) без создания новой таблицы.

Enterprise Manager при совершении переупорядочения создает новую таблицу, перемещает данные, затем удаляет старую таблицу и переименовывает новую таблицу в существующее имя.

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

73
4.08.2008 21:57:29

Я думаю, что всем здесь не хватает, так это то, что, хотя не всем приходится иметь дело с 10, 20 или 1000 экземплярами одной и той же системы программного обеспечения, установленной по всей стране и в мире ... те из нас, кто разрабатывает коммерческое программное обеспечение, делают это. В результате мы расширяем системы с течением времени, расширяем таблицы, добавляя поля по мере необходимости новых возможностей, и по мере того, как эти поля идентифицируются, они принадлежат существующей таблице и, таким образом, в течение десятилетия расширяются, растут, добавляются поля и т. Д. к таблицам .... а затем приходится работать с этими таблицами от проектирования до поддержки, иногда копаться в необработанных данных / устранять неполадки, чтобы отлаживать новые функциональные ошибки .... невероятно обидно не иметь первичной информации, которую вы хотите получить посмотрите в первой группе полей, когда у вас могут быть таблицы с 30-40-50 или даже 90 полями и да в строго нормализованной базе данных.

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

Это не только утомительно, отнимает много времени, но ... через пять лет, должно произойти снова ....

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

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

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

42
1.02.2013 00:34:36
У нас возникла та же проблема, и мы создали хранимую процедуру, которая автоматизирует этот процесс (переименование, создание новой таблицы, копирование, воссоздание всех внешних ключей, ограничений и т. Д.). Вам нужно только передать имя таблицы и новый порядок столбцов. Если это действительно может сэкономить вашей компании десятки часов в неделю, вы должны потратить время на написание подобного сценария. Для нас потребовалось всего около 2-3 дней, чтобы создать стабильный скрипт, который мы регулярно используем для изменения порядка столбцов. Он заботится обо всех функциях, которые мы используем в SqlServer (например, частичные индексы, индексированные представления и т. Д.) И состоит всего из примерно 400 LOC.
Andreas 2.09.2016 14:31:52
Я не знаю, почему они не могут абстрагироваться от макета столбца. Не нужно физически переупорядочивать столбцы! Уровень PHD и уровень разработки в Sql Server действительно поражает. Если принять во внимание сложность генерации плана запроса, статистику, индексирование и еще никто не встал и сказал: «Давайте просто создадим таблицу, которая представляет логический порядок. FieldID Guid, OrderBy int. Выполнено. Тогда SSMS или SELECT *использует это. Выключите его, если вы идеальный администратор баз данных и не хотите этого. Очень расстраивает. И теперь мои столы достаточно большие, чтобы я больше не мог их перебирать.
Simon_Weaver 3.02.2019 17:53:21

Если я понимаю ваш вопрос, вы хотите повлиять на то, какие столбцы возвращаются первым, вторым, третьим и т. Д. В существующих запросах, верно?

Если все ваши запросы написаны с SELECT * FROM TABLE-, то они будут отображаться в выводе, как они изложены в SQL.

Если ваши запросы написаны с SELECT Field1, Field2 FROM TABLE- то порядок их размещения в SQL не имеет значения.

5
10.05.2018 16:51:14

Когда Management Studio делает это, он создает временную таблицу, копирует все, отбрасывает исходную таблицу и переименовывает временную таблицу. Там нет простого эквивалентного оператора T-SQL.

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

Редактировать: избили!

3
4.08.2008 22:00:53

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

Допустим, у вас есть 5 таблиц. Таблица называетсяT_Testing

Имя, Фамилия, Номер телефона, Электронная почта и Member_ID

Вы хотите, чтобы он перечислил их ID, затем Фамилия, затем Имя, затем Телефон, затем Электронная почта.

Вы можете сделать это в соответствии с выбором.

Select Member_ID, LastName, FirstName, PhoneNumber, Email
From T_Testing

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

Select LastName, *
From T_Testing

Единственное, что вы хотите быть уверенным в том, что вы делаете, это то, что функция OrderBy или Where должна быть обозначена как Table.Column, если вы собираетесь использовать Where или OrderBy

Пример:

Select LastName, *
From T_Testing
Order By T_Testing.LastName Desc

Надеюсь, это поможет, я понял это, потому что мне нужно было сделать это самому.

1
7.02.2016 01:01:59
В этом запросе выберите LastName, * В T_Testing вы получите LastName два раза.
sqluser 15.01.2015 23:39:49
  1. Сценарий вашей существующей таблицы в окно запроса.
  2. Запустите этот скрипт для тестовой базы данных (удалите оператор Use)
  3. Используйте SSMS для внесения необходимых изменений в столбцы.
  4. Нажмите «Создать скрипт изменения» (по умолчанию самый левый и самый нижний значок на панели кнопок)
  5. Используйте этот скрипт против вашей реальной таблицы

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

1
8.03.2016 14:31:08

Это можно сделать с помощью SQL, изменив системные таблицы напрямую. Например, посмотрите здесь:

Изменить таблицу - добавить новый столбец между

Однако я бы не советовал играть с системными столами, если это не является абсолютно необходимым.

0
27.01.2013 12:16:58

Невозможно изменить порядок столбцов без воссоздания всей таблицы. Если у вас есть только несколько экземпляров базы данных, вы можете использовать для этого SSMS (выберите таблицу и нажмите «Дизайн»).

Если у вас слишком много экземпляров для ручного процесса, попробуйте этот скрипт: https://github.com/Epaminaidos/reorder-columns

0
3.09.2016 10:56:11