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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

Если все ваши запросы написаны с помощью SELECT * FROM TABLE, то они будут отображаться на выходе, как они выложены в SQL. Если ваши запросы написаны с помощью SELECT Field1, Field2 FROM TABLE - тогда порядок, который они выложены в SQL, не имеет значения.

Ответ 4

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

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

Изменить: избили!

Ответ 5

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

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

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

Ответ 6

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

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

FirstName, LastName, PhoneNumber, Email и Member_ID

вы хотите, чтобы он перечислил их идентификатор, затем фамилию, потом имя FirstName, затем телефон, затем электронную почту.

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

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

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

Ответ 7

  • Script существующую таблицу в окне запроса.
  • Запустите этот script с тестовой базой данных (удалите инструкцию Use)
  • Используйте SSMS для внесения необходимых изменений столбца.
  • Нажмите "Создать изменение" script (слева и слева внизу значок по умолчанию)
  • Используйте этот script для вашей реальной таблицы

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

Ответ 8

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

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