Сведения о вопросе

Sadijon

16:03, 1st July, 2020

Теги

sql-server    

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

Просмотров: 464   Ответов: 8

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

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

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



  Сведения об ответе

DO__IT

18:03, 1st July, 2020

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

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

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


  Сведения об ответе

ЯЯ__4

18:03, 1st July, 2020

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

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

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

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

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

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


  Сведения об ответе

fo_I_K

18:03, 1st July, 2020

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

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

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


  Сведения об ответе

FAriza

18:03, 1st July, 2020

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

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

Правка: избили!


  Сведения об ответе

dumai

18:03, 1st July, 2020

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

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

FirstName, LastName, PhoneNumber, Email и Member_ID

вы хотите, чтобы он перечислил их ID, затем фамилию, затем FirstName, затем телефон, а затем Email.

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

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

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


  Сведения об ответе

DINO

18:03, 1st July, 2020

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

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


  Сведения об ответе

VCe znayu

18:03, 1st July, 2020

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

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

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


  Сведения об ответе

qwerty101

18:03, 1st July, 2020

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться