Как выбрать некоторые конкретные столбцы из таблицы, если таблица имеет более 100 столбцов - PullRequest
1 голос
/ 24 марта 2011

Мне нужно выбрать 90 столбцов из 107 столбцов в моей таблице.

Можно ли написать select * except( column1,column2,..) from table или любым другим способом получить только определенные столбцы, или мне нужно написать все 90 столбцовв утверждении выбора?

Ответы [ 6 ]

8 голосов
/ 24 марта 2011

Вы можете создать список столбцов:

select  name + ', '
from    sys.columns
where   object_id = object_id('YourTable')
        and name not in ('column1', 'column2')

Это можно сделать на лету с помощью динамического SQL:

declare @columns varchar(max)

select  @columns = case when @columns is null then '' else @columns + ', ' end +
            quotename(name)
from    sys.columns
where   object_id = object_id('YourTable')
        and name not in ('column1', 'column2')

declare @query varchar(max)
set @query = 'select ' + @columns + ' from YourTable'
exec (@query)
2 голосов
/ 24 марта 2011

Нет - вам нужно написать все необходимые столбцы.Для этого вы можете создать представление, поэтому в вашем фактическом утверждении можно использовать select * (но тогда вам нужно перечислить все столбцы в представлении).

2 голосов
/ 24 марта 2011

Вы могли бы потенциально сделать некоторые динамические sql для этого, но это кажется излишним.Кроме того, обычно считается плохой практикой использовать SELECT *... намного меньше SELECT * but not col3, col4, col5, поскольку вы не получите последовательных результатов в случае изменений таблицы.

Просто используйте SSMS для сценария оператора select и удаления столбцовтебе не нужноЭто должно быть просто.

2 голосов
/ 24 марта 2011

В SQL нет способа выбрать все, КРОМЕ col1, col2 и т. Д.

Единственный способ сделать это - это обработать приложение и динамически сгенерировать SQL-запрос.

2 голосов
/ 24 марта 2011

Нет, нет способа сделать * EXCEPT some columns. SELECT * сам по себе редко, если вообще когда-либо, должен использоваться вне EXISTS тестов.

Если вы используете SSMS, вы можете перетащить папку «столбцы» (под таблицей) из обозревателя объектов в окно запроса, и он вставит все имена столбцов (чтобы вы могли затем просмотреть их и убери 17 ты не хочешь)

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

Так как вы никогда не должны использовать select *, почему это проблема? Просто перетащите столбцы из Обозревателя объектов и удалите ненужные.

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