我们都知道,要从表中选择所有列,可以使用

SELECT * FROM tableA

是否有一种方法可以在不指定所有列的情况下从表中排除列?

SELECT * [except columnA] FROM tableA

我所知道的唯一方法是手动指定所有列并排除不需要的列。这真的很耗时,所以我正在寻找方法来节省时间和精力,以及未来的维护表应该有更多/更少的列。


当前回答

简单的解决方案。在SSMS中,找到您的表,右键单击它和脚本表As,然后选择到。查询将被写入列出的每一列。注释掉或删除您不想要的列。非常快速和简单的解决方案忽略一个列。

其他回答

一位同事提出了一个不错的替代方案:

在前面的查询中执行SELECT INTO(在哪里生成或获取? 数据从)到一个表(你将删除时完成)。这将 为你创建结构。 做一个脚本创建到新的查询 窗口。 删除不需要的列。格式化剩下的列 成1的内衬,并粘贴为您的列列表。 删除表 创建。

做……

这对我们帮助很大。

在Hive Sql中,你可以这样做:

set hive.support.quoted.identifiers=none;
select 
    `(unwanted_col1|unwanted_col2|unwanted_col3)?+.+`
from database.table

这就给了你剩下的cols

就像其他人说的那样,没有办法做到这一点,但如果你使用Sql Server,我使用的一个技巧是将输出更改为逗号分隔,那么就这样做

select top 1 * from table

并从输出窗口中剪切整个列列表。然后你可以选择你想要的列,而不必把它们全部输入。

有时同一个程序必须处理不同的数据库结构。因此,我不能在程序中使用列列表来避免选择语句中的错误。

*给出所有可选字段。我在使用之前检查数据表中是否存在字段。这就是我在select中使用*的原因。

这是我如何处理排除字段:

Dim da As New SqlDataAdapter("select * from table", cn)
da.FillSchema(dt, SchemaType.Source)
Dim fieldlist As String = ""
For Each DC As DataColumn In DT.Columns
   If DC.ColumnName.ToLower <> excludefield Then
    fieldlist = fieldlist &  DC.Columnname & ","
   End If
  Next

No.

轻维护的最佳实践是只指定所需的列。

至少有两个原因:

这使得客户端和数据库之间的契约是稳定的。每次都是相同的数据 性能,涵盖指标

编辑(2011年7月):

如果您从对象资源管理器中拖动表的列节点,它会在查询窗口中为您放置一个CSV列列表,从而实现您的目标之一