Мы все знаем, что для выбора всех столбцов из таблицы мы можем использовать
SELECT * FROM tableA
Есть ли способ исключить столбцы из таблицы без указания всех столбцов?
SELECT * [except columnA] FROM tableA
Единственный известный мне способ - вручную указать все столбцы и исключить ненужные столбцы. Это действительно отнимает много времени, поэтому я ищу способы сэкономить время и усилия на этом, а также будущее обслуживание, если в таблице будет больше / меньше столбцов.
sql
sql-server
tsql
pb2q
источник
источник
SELECT *
запрос (в OLE DB есть проблемы с отображением этих строк ). Я не мог указать правильные столбцы, потому что у меня не было прямого доступа к базе данных MySQL, однако SQL Server был достаточно любезен, чтобы сообщить мне имена столбцов сSELECT DISTINCT *
за исключением того, что ключевой столбец работает без повторяющихся строк, созданных кем-то другимОтветы:
Я согласен со всеми ... но если бы я собирался сделать что-то подобное, я мог бы сделать это так:
источник
SELECT table1.ID AS table1ID ...
IIRC.Нет.
Лучшая практика обслуживания - указывать только необходимые столбцы.
Как минимум 2 причины:
Изменить (июль 2011 г.):
Если вы перетаскиваете из Object Explorer
Columns
узел таблицы, он помещает список CSV-столбцов в окно запроса для вас, что позволяет достичь одной из ваших целей.источник
Если вы не хотите писать каждое имя столбца вручную, вы можете использовать
Script Table As
его, щелкнув правой кнопкой мыши по таблице или просмотрев в SSMS следующим образом:Затем вы получите весь запрос select в окне New Query Editor, а затем удалите ненужный столбец, например:
Выполнено
источник
Автоматический способ сделать это в SQL (SQL Server):
источник
row_number()
к каждой строке, затем выполнить объединениеrow_number
, затем выбрать все, кроме исключения,row_number
из результата объединения.Вы можете создать представление, в котором есть столбцы, которые вы хотите выбрать, тогда вы можете просто
select *
из представления ...источник
Да, это возможно (но не рекомендуется).
Пояснение к коду :
SELECT @variable = @variable + ... FROM
для объединения имен столбцов. Этот типSELECT
не возвращает набор результатов. Это, возможно, недокументированное поведение, но работает в каждой версии SQL Server. В качестве альтернативы вы можете использоватьSET @variable = (SELECT ... FOR XML PATH(''))
для объединения строк.ISNULL
функцию для добавления запятой, только если это не имя первого столбца. ИспользуйтеQUOTENAME
функцию для поддержки пробелов и знаков препинания в именах столбцов.WHERE
предложение, чтобы скрыть столбцы, которые мы не хотим видеть.EXEC (@variable)
, также известный как динамический SQL , для разрешения имен столбцов во время выполнения. Это необходимо, потому что мы не знаем имен столбцов во время компиляции.источник
SELECT @columns FROM contact
Как и другие говорили, что сделать это невозможно, но если вы используете Sql Server, уловка, которую я использую, состоит в том, чтобы изменить вывод на запятую, а затем
и вырезать весь список столбцов из окна вывода. Затем вы можете выбрать, какие столбцы вы хотите, не вводя их все.
источник
По сути, вы не можете делать то, что хотели бы - но вы можете найти правильные инструменты, которые помогут вам сделать вещи немного проще.
Если вы посмотрите на SQL-запрос Red-Gate , вы можете набрать «SELECT * FROM MyTable», а затем переместить курсор назад после «*» и нажать <TAB>, чтобы развернуть список полей и удалить те несколько полей, которые вы не нужно
Это не идеальное решение - но чертовски хорошее! :-) Жаль, что Intellisense в MS SQL Server Management Studio все еще недостаточно интеллектуален, чтобы предлагать эту функцию .......
Марк
источник
нет нет способа сделать это. может быть, вы можете создать собственные представления, если это возможно в вашей ситуации
РЕДАКТИРОВАТЬ Может быть, если ваша БД поддерживает выполнение динамического SQL, вы могли бы написать SP и передать столбцы, которые вы не хотите видеть, и позволить ему динамически создавать запрос и возвращать результат вам. Я думаю, что это выполнимо в SQL Server по крайней мере
источник
Если вы используете SQL Server Management Studio, выполните следующие действия:
Наслаждаться.
источник
В SQL Management Studio вы можете развернуть столбцы в обозревателе объектов, а затем перетащить
Columns
элемент дерева в окно запроса, чтобы получить список столбцов через запятую.источник
Таким образом, вы не можете сделать это, но я не согласен со всеми комментариями, приведенными выше, существуют «сценарии», в которых вы можете законно использовать * при создании вложенного запроса для выбора определенного диапазона из целого списка (например, paging) почему в мире захочется указать каждый столбец во внешнем операторе select, когда вы сделали это во внутреннем?
источник
ОБНОВИТЬ:
Вы также можете создать хранимую процедуру для решения этой задачи, если будете использовать ее чаще. В этом примере я использовал встроенную функцию STRING_SPLIT (), которая доступна в SQL Server 2016+, но, если вам нужно, есть множество примеров того, как создать его вручную в SO.
А потом просто:
источник
Если мы говорим о процедурах, он работает с этим трюком, чтобы сгенерировать новый запрос и выполнить его немедленно :
источник
Используя декларативный SQL обычным способом, нет.
Я думаю, что ваш предложенный синтаксис достоин и хорош. На самом деле язык реляционной базы данных «Учебник D» имеет очень похожий синтаксис, где за ключевыми словами
ALL BUT
следует набор атрибутов (столбцов).Тем не менее, SQL
SELECT *
уже имеет много шансов (ответ @ Guffa здесь является типичным возражением), поэтому я не думаю, что вSELECT ALL BUT
ближайшее время попадет в стандарт SQL.Я думаю, что лучший способ обойти это создать
VIEW
только те столбцы, которые вы хотитеSELECT * FROM ThatView
.источник
select *
сомнительным - очень полезен для специальных вещей и программ, которые должны обрабатывать таблицы данных в общем, но не так много для построения (из-за отсутствия лучшего слова) «чистые» запросы. Тем не менее, отсутствие стандарта ANSI не означает, что Microsoft не может добавить его к своему диалекту, как со многими другими вещами, но я скептически отношусь к этому.Современный диалект SQL, такой как BigQuery, предлагает отличное решение
Это очень мощный синтаксис SQL, позволяющий избежать длинного списка столбцов, которые необходимо постоянно обновлять из-за изменения имени столбца таблицы. И эта функциональность отсутствует в текущей реализации SQL Server, что очень жаль. Надеемся, что однажды Microsoft Azure станет более дружественным к ученым.
Специалистам по данным нравится иметь возможность быстро сократить запрос и удалить некоторые столбцы (из-за дублирования или по любой другой причине).
https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#select-modifiers
источник
Postgres SQL имеет способ сделать это
Пожалуйста, обратитесь: http://www.postgresonline.com/journal/archives/41-How-to-SELECT-ALL-EXCEPT-some-columns-in-a-table.html
Информационная схема Hack Way
Выше для моего конкретного примера таблицы - генерирует SQL-оператор, который выглядит следующим образом
ВЫБЕРИТЕ o.officepark, o.owner, o.squarefootage ОТ офисного парка As o
источник
Я не знаю ни одной базы данных, которая бы поддерживала это (SQL Server, MySQL, Oracle, PostgreSQL). Это определенно не является частью стандартов SQL, поэтому я думаю, что вы должны указывать только те столбцы, которые вам нужны.
Конечно, вы можете динамически построить оператор SQL и выполнить его на сервере. Но это открывает возможность для инъекций SQL.
источник
Я знаю, что это немного старо, но я только столкнулся с той же самой проблемой и искал ответ. Затем старший разработчик показал мне очень простой трюк.
Если вы используете редактор запросов Management Studio, разверните базу данных, затем разверните таблицу, из которой вы выбираете, чтобы увидеть папку столбцов.
В вашем операторе select просто выделите указанную выше папку столбцов и перетащите ее в окно запроса. Он вставит все столбцы таблицы, а затем просто удалит идентификационный столбец из списка столбцов ...
источник
SELECT * Except(tableName.ColumnName) FROM ...
Лучший способ решить эту проблему - использовать представление, вы можете создать представление с необходимыми столбцами и извлечь из него данные.
источник
Если вы хотите исключить конфиденциальный столбец, например, пароль, я делаю это, чтобы скрыть значение:
SELECT * , "" as password FROM tableName;
источник
Что ж, это обычная лучшая практика - указывать, какие столбцы вы хотите, вместо того, чтобы просто указывать *. Таким образом, вы должны просто указать, какие поля вы хотите, чтобы ваш выбор возвращал.
источник
Колледж посоветовал хорошую альтернативу:
Выполнено...
Это нам очень помогло.
источник
Щелкните правой кнопкой мыши таблицу в проводнике объектов, выберите 1000 лучших строк
В нем будут перечислены все столбцы, а не *. Затем удалите ненужные столбцы. Должно быть намного быстрее, чем печатать самостоятельно.
Затем, когда вы почувствуете, что это слишком сложная работа, получите SQL-запрос от Red Gate и введите ssf из tbl, перейдите к * и снова нажмите вкладку.
источник
Вот что я часто использую для этого случая:
@colnames
похожеcolumn1,column2,column5
источник
Иногда одна и та же программа должна обрабатывать разные структуры базы данных. Поэтому я не мог использовать список столбцов в программе, чтобы избежать ошибок в
select
выражениях.*
дает мне все дополнительные поля. Я проверяю, существуют ли поля в таблице данных перед использованием. Это моя причина для использования*
вselect
.Вот как я обрабатываю исключенные поля:
источник
Я знаю, что этот вопрос старый, но я надеюсь, что он все еще может быть полезным. Ответ вдохновлен обсуждением на форумах по SQL Server . Вы можете сделать это хранимой процедурой . Он также может быть изменен, чтобы добавить более одного, кроме полей.
источник
Не было бы проще сделать это:
-Щелкните по столбцу Column_name> Copy> Paste (создает вертикальный список) в окне New Query и просто введите запятые перед каждым значением столбца ... закомментируйте столбцы, которые вам не нужны ... намного меньше набрав, чем любой код, предлагаемый здесь и по-прежнему управляемым.
источник
Вы можете получить SQL Complete с devart.com, который не только расширяет подстановочный знак *, как это делает SQL Prompt от Red Gate (как описано в ответе cairnz), но также предоставляет выпадающий список столбцов с флажками, в которых вы можете проверить все столбцы, которые вы хотите в списке выбора, и они будут вставлены автоматически для вас (и если вы затем снимите флажок столбец, он будет автоматически удален из списка выбора).
источник
В SSMS есть более простой способ с IntelliSense и Aliasing . Попробуй это
источник