我需要从我的表格中的107列中选择90列。
是否可以编写select * except( column1,column2,..) from table
或其他任何方式来获取特定列,或者我需要在select语句中写下所有90列?
答案 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 columns
。 SELECT *
本身应该很少(如果有的话)在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 *,为什么这是一个问题?只需从对象资源管理器中拖动列,然后删除不需要的列。