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

Sql 如果表的列数超过100列,如何从表中选择某些特定列,sql,sql-server,sql-server-2005,tsql,sql-server-2008,Sql,Sql Server,Sql Server 2005,Tsql,Sql Server 2008,我需要从表中的107列中选择90列 是否可以从表中写入select*except(column1,column2,…)或以任何其他方式仅获取特定列,或者我需要在select语句中写入所有90列?否,除了某些列之外,没有任何方法可以执行*选择*本身很少(如果有的话)在EXISTS测试之外使用 如果您使用的是SSM,您可以将“columns”文件夹(表下)从对象资源管理器拖到查询窗口中,它将插入所有列名(这样您就可以遍历它们并删除不需要的17个列名)不,除了一些列之外,没有其他方法可以执行*选择*本

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


是否可以从表中写入
select*except(column1,column2,…)或以任何其他方式仅获取特定列,或者我需要在select语句中写入所有90列?

否,除了某些列之外,没有任何方法可以执行
*<代码>选择*
本身很少(如果有的话)在
EXISTS
测试之外使用


如果您使用的是SSM,您可以将“columns”文件夹(表下)从对象资源管理器拖到查询窗口中,它将插入所有列名(这样您就可以遍历它们并删除不需要的17个列名)

不,除了一些列之外,没有其他方法可以执行
*<代码>选择*
本身很少(如果有的话)在
EXISTS
测试之外使用


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

在SQL中,除了col1、col2等之外,无法选择所有内容


要做到这一点,唯一的方法是让应用程序处理这个问题,并动态生成sql查询。

在sql中,除了col1、col2等,没有办法选择所有内容


要做到这一点,唯一的方法是让应用程序处理这个问题,并动态生成sql查询。

您可能会为此执行一些动态sql,但这似乎有些过头了。此外,使用
SELECT*…
通常被认为是不好的做法,使用
SELECT*,而不是col3、col4、col5
,因为在表格更改的情况下无法获得一致的结果


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

您可能会为此使用一些动态sql,但这似乎有些过分了。此外,使用
SELECT*…
通常被认为是不好的做法,使用
SELECT*,而不是col3、col4、col5
,因为在表格更改的情况下无法获得一致的结果


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

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

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

您可以生成列列表:

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)

您可以生成列列表:

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)

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

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

@Brandon-有时候这是没办法的。我有很多表有150ish列,因为这是我们从客户那里得到它的方式。它表示原始客户机数据,我们需要将其保存在接收到的形式中。我们在此基础上构建规范化数据以供实际使用。@Brandon-可能有几种情况需要100+列。您需要仔细查看可能的重复项-您可以键入
SELECT*FROM dbo.Table
并将插入符号放在星号之后,按
TAB
,您将获得从数据库读入的列的完整列表。非常方便,非常有用-我不想再没有它了@布兰登——有时候这是没办法的。我有很多表有150ish列,因为这是我们从客户那里得到它的方式。它表示原始客户机数据,我们需要将其保存在接收到的形式中。我们在此基础上构建规范化数据以供实际使用。@Brandon-可能有几种情况需要100+列。您需要仔细查看可能的重复项-您可以键入
SELECT*FROM dbo.Table
并将插入符号放在星号之后,按
TAB
,您将获得从数据库读入的列的完整列表。非常方便,非常有用-我不想再没有它了+1,虽然我会在
选择上为
QUOTENAME(name)
更改
name
,但我会在
选择上为
QUOTENAME(name)
更改
name