Могу ли я логически изменить порядок столбцов в таблице?
Если я добавляю столбец в таблицу в Microsoft SQL Server, могу ли я контролировать, где столбец отображается логически в запросах?
Я не хочу возиться с физическим расположением столбцов на диске, но я хотел бы логически группировать столбцы вместе, когда это возможно, чтобы такие инструменты, как SQL Server Management Studio, отображали содержимое таблицы удобным способом.
Я знаю, что могу сделать это через SQL Management Studio, перейдя в режим "дизайн" для таблицы и перетаскивание порядка столбцов вокруг, но я хотел бы иметь возможность делать это в сыром SQL, чтобы я мог выполнять сценарий упорядочения из командной строки.
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
Я надеюсь, что это помогает, я понял это, потому что мне нужно было сделать это сам.
- скрипт существующей таблицы в окно запроса.
- запустите этот скрипт для тестовой базы данных (удалите инструкцию Use)
- используйте SSMS, чтобы внести необходимые изменения в столбец
- Нажмите кнопку Создать сценарий изменения (самый левый и самый нижний значок кнопок, по умолчанию)
- используйте этот скрипт против вашей реальной таблицы
все, что скрипт действительно делает, это создает вторую таблицу таблицы с нужными порядками столбцов, копирует все ваши данные в него, отбрасывает исходную таблицу, а затем переименовывает вторичную таблицу, чтобы занять ее место. Это спасет вас от написания его самостоятельно, хотя вы хотите сценарий развертывания.
невозможно изменить порядок столбцов без воссоздания всей таблицы. Если у вас есть только несколько экземпляров базы данных, вы можете использовать SSMS для этого (выберите таблицу и нажмите "дизайн").
Если у вас слишком много экземпляров для ручного процесса, вы должны попробовать этот скрипт: https://github.com/Epaminaidos/reorder-columns