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


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

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

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

8 78

8 ответов:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Alter table-Добавить новый столбец между

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

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

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

имя, фамилия, номер телефона, адрес электронной почты, и Member_ID

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

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

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

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

Select LastName, *
From T_Testing

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

пример:

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

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

  1. скрипт существующей таблицы в окно запроса.
  2. запустите этот скрипт для тестовой базы данных (удалите инструкцию Use)
  3. используйте SSMS, чтобы внести необходимые изменения в столбец
  4. Нажмите кнопку Создать сценарий изменения (самый левый и самый нижний значок кнопок, по умолчанию)
  5. используйте этот скрипт против вашей реальной таблицы

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

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

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