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

StackOverflow https://stackoverflow.com/questions/1610

  •  08-06-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вы можете сделать это согласно Select.

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

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

Select LastName, *
From T_Testing

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

Пример:

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top