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