Sql 如果表的列数超过100列,如何从表中选择某些特定列
我需要从表中的107列中选择90列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个列名)不,除了一些列之外,没有其他方法可以执行*选择*本
是否可以从表中写入
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
。