Если я добавляю столбец в таблицу в Microsoft SQL Server, могу ли я контролировать, где столбец логически отображается в запросах?
Я не хочу связываться с физическим расположением столбцов на диске, но я хотел бы, когда это возможно, логически группировать столбцы, чтобы такие инструменты, как SQL Server Management Studio, отображали содержимое таблицы удобным способом.
Я знаю, что могу сделать это через SQL Management Studio, перейдя в режим «конструирования» для таблиц и перетаскивая порядок столбцов вокруг, но я хотел бы иметь возможность сделать это в необработанном SQL, чтобы я мог выполнять упорядочение Скрипт из командной строки.
Вы не можете сделать это программно (безопасным способом) без создания новой таблицы.
Enterprise Manager при совершении переупорядочения создает новую таблицу, перемещает данные, затем удаляет старую таблицу и переименовывает новую таблицу в существующее имя.
Если вы хотите, чтобы ваши столбцы находились в определенном порядке / группировке без изменения их физического порядка, вы можете создать представление, которое может быть любым, что вы пожелаете.
Я думаю, что всем здесь не хватает, так это то, что, хотя не всем приходится иметь дело с 10, 20 или 1000 экземплярами одной и той же системы программного обеспечения, установленной по всей стране и в мире ... те из нас, кто разрабатывает коммерческое программное обеспечение, делают это. В результате мы расширяем системы с течением времени, расширяем таблицы, добавляя поля по мере необходимости новых возможностей, и по мере того, как эти поля идентифицируются, они принадлежат существующей таблице и, таким образом, в течение десятилетия расширяются, растут, добавляются поля и т. Д. к таблицам .... а затем приходится работать с этими таблицами от проектирования до поддержки, иногда копаться в необработанных данных / устранять неполадки, чтобы отлаживать новые функциональные ошибки .... невероятно обидно не иметь первичной информации, которую вы хотите получить посмотрите в первой группе полей, когда у вас могут быть таблицы с 30-40-50 или даже 90 полями и да в строго нормализованной базе данных.
Я часто хотел, чтобы я мог сделать это, по этой точной причине. Но если не делать именно то, что делает SQL, создать сценарий создания новой таблицы так, как я этого хочу, записать в нее вставку, затем удалить все существующие ограничения, отношения, ключи, индексы и т. Д. И т. Д. Из существующей таблицы и переименовать «новая» таблица возвращается к старому имени, а затем читает все эти ключи, отношения, индекс и т. д. и т. д.
Это не только утомительно, отнимает много времени, но ... через пять лет, должно произойти снова ....
Это так близко, чтобы стоить такого огромного объема работы, но суть в том, что ... эта способность нам понадобится не в последний раз, так как наши системы будут продолжать расти, расширяться и получать поля в беспорядочном порядке по инициативе необходимость / дизайн дополнений.
Большинство разработчиков думают с единой системной точки зрения, которая обслуживает одну компанию или очень специфический рынок жестких коробок.
«Готовые», но значительно прогрессивные дизайнеры и лидеры развития в своем рыночном пространстве всегда будут иметь дело с этой проблемой, много раз ..... хотели бы творческого решения, если кто-то есть. Это может легко сэкономить моей компании дюжину часов в неделю, просто не нужно прокручивать или помнить, где находится «это» поле в таблице исходных данных ....
FieldID Guid
, OrderBy int
. Выполнено. Тогда SSMS или SELECT *
использует это. Выключите его, если вы идеальный администратор баз данных и не хотите этого. Очень расстраивает. И теперь мои столы достаточно большие, чтобы я больше не мог их перебирать. Если я понимаю ваш вопрос, вы хотите повлиять на то, какие столбцы возвращаются первым, вторым, третьим и т. Д. В существующих запросах, верно?
Если все ваши запросы написаны с SELECT * FROM TABLE
-, то они будут отображаться в выводе, как они изложены в SQL.
Если ваши запросы написаны с SELECT Field1, Field2 FROM TABLE
- то порядок их размещения в SQL не имеет значения.
Когда Management Studio делает это, он создает временную таблицу, копирует все, отбрасывает исходную таблицу и переименовывает временную таблицу. Там нет простого эквивалентного оператора T-SQL.
Если вам это не нравится, вы всегда можете создать представление таблицы со столбцами в том порядке, в каком вы хотите, и использовать это?
Редактировать: избили!
Есть один способ, но только временно для самого запроса. Например,
Допустим, у вас есть 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
Надеюсь, это поможет, я понял это, потому что мне нужно было сделать это самому.
- Сценарий вашей существующей таблицы в окно запроса.
- Запустите этот скрипт для тестовой базы данных (удалите оператор Use)
- Используйте SSMS для внесения необходимых изменений в столбцы.
- Нажмите «Создать скрипт изменения» (по умолчанию самый левый и самый нижний значок на панели кнопок)
- Используйте этот скрипт против вашей реальной таблицы
Все, что действительно делает скрипт, - это создает вторую таблицу таблиц с нужными порядками столбцов, копирует в нее все ваши данные, удаляет исходную таблицу и затем переименовывает вторичную таблицу, чтобы занять ее место. Это избавляет вас от написания этого самостоятельно, хотя вам нужен сценарий развертывания.
Это можно сделать с помощью SQL, изменив системные таблицы напрямую. Например, посмотрите здесь:
Изменить таблицу - добавить новый столбец между
Однако я бы не советовал играть с системными столами, если это не является абсолютно необходимым.
Невозможно изменить порядок столбцов без воссоздания всей таблицы. Если у вас есть только несколько экземпляров базы данных, вы можете использовать для этого SSMS (выберите таблицу и нажмите «Дизайн»).
Если у вас слишком много экземпляров для ручного процесса, попробуйте этот скрипт: https://github.com/Epaminaidos/reorder-columns