如果表的列数超过100,如何从表中选择某些特定列

时间:2011-03-24 14:48:10

标签: sql sql-server sql-server-2005 tsql sql-server-2008

我需要从我的表格中的107列中选择90列。

是否可以编写select * except( column1,column2,..) from table或其他任何方式来获取特定列,或者我需要在select语句中写下所有90列?

6 个答案:

答案 0 :(得分:8)

您可以生成列列表:

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)

答案 1 :(得分:2)

不,没有办法* EXCEPT some columnsSELECT *本身应该很少(如果有的话)在EXISTS测试之外使用。

如果您正在使用SSMS,您可以将“columns”文件夹(在表格下)从对象资源管理器拖到查询窗口中,它将插入所有列名称(这样您就可以通过它们和删除你不想要的17)

答案 2 :(得分:2)

SQL中没有办法选择除col1,col2等之外的所有内容。

执行此操作的唯一方法是让应用程序处理此问题,并动态生成SQL查询。

答案 3 :(得分:2)

你可能会为此做一些动态的SQL,但它看起来有点过分。另外,通常认为使用SELECT *...更少SELECT * but not col3, col4, col5的做法很差,因为在表格更改的情况下,您将无法获得一致的结果。

只需使用SSMS编写一个select语句脚本并删除不需要的列。应该很简单。

答案 4 :(得分:2)

不 - 您需要编写所需的所有列。您可以为此创建一个视图,因此您的实际语句可以使用select *(但是您必须列出视图中的所有列)。

答案 5 :(得分:1)

由于你永远不应该使用select *,为什么这是一个问题?只需从对象资源管理器中拖动列,然后删除不需要的列。