可以从`*`中排除或重新排序列?

时间:2010-05-27 00:34:46

标签: sql sql-server select

  

可能重复:
  SQL exclude a column using SELECT * [except columnA] FROM tableA?

是否可以使用SQL Server从select * from table语句中排除列?

我需要这个,这是我唯一的选择,除了解析原始SQL字符串以获取所需的字段名称(我真的不想这样做)。

只是大胆。 查询完成后,我无法访问表格所需的字段列表,但我确实知道哪个字段不需要。这是复杂的多部分查询的一部分。

肯定必须有某种方式,即使它是“hackish”,如使用表变量或视图

我的另一个选择是重新排序列。我的问题是使用ExecuteScalar SQL函数获取第一行和第一列。

修改

我无法添加答案,因为现在已经关闭,但我最终这样做的方式是这样的:

;with results_cte as (
  select (calculation) as calculated_column, * from table
)
select * into #temptable from results_cte
where calculated_column<10 /*or whatever*/

alter table #temptable
  drop column calculated_column

select * from #temptable
drop table #temptable

4 个答案:

答案 0 :(得分:1)

不。您必须手动构建语句或只选择*。

答案 1 :(得分:0)

没有

相反,您可以检查syscolumns以获取所有字段名称,或者(可能)SELECT *并忽略该列。

答案 2 :(得分:0)

如果使用动态SQL,则可以从有关表或视图的元数据(INFORMATION_SCHEMA.COLUMNS)生成查询,并以这种方式排除列。我做了很多工作来生成触发器或视图。

但是SQL语言中没有任何内容支持这一点。

答案 3 :(得分:0)

处理此问题的最佳方法是select *,然后不要将排除列显示给前端的用户。正如其他人所指出的那样,SQL没有直接执行all-columns-except结构的能力。