SQL исключает столбец, используя SELECT * [кроме columnA] FROM tableA? - PullRequest
626 голосов
/ 08 апреля 2009

Мы все знаем, что для выбора всех столбцов из таблицы мы можем использовать

SELECT * FROM tableA

Есть ли способ исключить столбцы из таблицы без указания всех столбцов?

SELECT * [except columnA] FROM tableA

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

спасибо!

Ответы [ 36 ]

2 голосов
/ 15 февраля 2016

Postgres sql имеет способ сделать это

пожалуйста, обратитесь: http://www.postgresonline.com/journal/archives/41-How-to-SELECT-ALL-EXCEPT-some-columns-in-a-table.html

Информационная схема Hack Way

SELECT 'SELECT ' || array_to_string(ARRAY(SELECT 'o' || '.' || c.column_name
        FROM information_schema.columns As c
            WHERE table_name = 'officepark' 
            AND  c.column_name NOT IN('officeparkid', 'contractor')
    ), ',') || ' FROM officepark As o' As sqlstmt

Выше для моей конкретной таблицы примеров - генерирует SQL-оператор, который выглядит следующим образом

ВЫБРАТЬ o.officepark, o.owner, o.squarefootage ОТ офиспарка As o

1 голос
/ 01 октября 2015

Иногда одна и та же программа должна обрабатывать разные структуры базы данных. Поэтому я не мог использовать список столбцов в программе, чтобы избежать ошибок в операторах select.

* дает мне все дополнительные поля. Я проверяю, существуют ли поля в таблице данных перед использованием. Это моя причина для использования * в select.

Вот как я обрабатываю исключенные поля:

Dim da As New SqlDataAdapter("select * from table", cn)
da.FillSchema(dt, SchemaType.Source)
Dim fieldlist As String = ""
For Each DC As DataColumn In DT.Columns
   If DC.ColumnName.ToLower <> excludefield Then
    fieldlist = fieldlist &  DC.Columnname & ","
   End If
  Next
1 голос
/ 03 марта 2015

То, что я часто использую для этого случая:

declare @colnames varchar(max)=''

select @colnames=@colnames+','+name from syscolumns where object_id(tablename)=id and name not in (column3,column4)

SET @colnames=RIGHT(@colnames,LEN(@colnames)-1)

@colnames выглядит как column1,column2,column5

1 голос
/ 24 марта 2011

Щелкните правой кнопкой мыши таблицу в проводнике объектов, выберите верхнюю 1000 строк

В нем будут перечислены все столбцы, а не *. Затем удалите ненужные столбцы. Должно быть намного быстрее, чем печатать самостоятельно.

Затем, когда вы почувствуете, что это слишком трудоемко, получите SQL-запрос Red Gate и введите ssf из tbl, перейдите на * и снова нажмите вкладку.

0 голосов
/ 12 августа 2016

Я знаю, что этот вопрос старый, но я надеюсь, что он все еще может быть полезным. Ответ вдохновлен обсуждением Форумы по SQL Server . Вы можете сделать это хранимой процедурой . Его также можно изменить, добавив более одного, кроме полей.

DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = COALESCE(@SQL + ', ', ' ' ) + name from sys.columns where name not in ('colName1','colName2') and object_id = (Select id from sysobjects where name = 'tblName')
SELECT @SQL = 'SELECT ' + @SQL + ' FROM ' + 'tblName'
EXEC sp_executesql  @SQL
0 голосов
/ 12 марта 2016

Вы можете использовать спецификацию столбца REGEX.

Следующий запрос выбирает все столбцы, кроме ds и hr ВЫБРАТЬ (ds|hr)?+.+ ОТ ПРОДАЖ

0 голосов
/ 14 февраля 2016

Если кто-то здесь использует MySql, как я использовал это:

CREATE TABLE TempTable AS SELECT * FROM #YourTable; 

ALTER TABLE TempTable 
DROP COLUMN #YourColumn; 

SELECT * FROM TempTable; 
DROP TABLE TempTable;
0 голосов
/ 12 мая 2011

Не проще ли это сделать:

sp_help <table_name>

-Щелкните по столбцу Column_name> Copy> Paste (создает вертикальный список) в окне New Query и просто введите запятые перед каждым значением столбца ... закомментируйте столбцы, которые вам не нужны .. гораздо меньше набирает текст, чем любой код, предлагаемый здесь и все еще управляемый.

0 голосов
/ 03 августа 2014

Это не сэкономит время при загрузке из базы данных. Но вы всегда можете удалить столбец, который вам не нужен, в массиве, в котором он находится. У меня было несколько столбцов в таблице, но я не хотел одного конкретного. Мне было лень записывать их все в операторе SELECT.

$i=0;
$row_array = array();

while($row = mysqli_fetch_assoc($result)){

  $row_array[$i]=$row;
  unset($row_array[$i]['col_name']);
  $i++;
}
0 голосов
/ 31 июля 2009

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

Не уверен, что транспонирование можно выполнить в базе данных SQL, если да, тогда это будет еще проще.

Jeff

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...