我们都知道,要从表中选择所有列,可以使用
SELECT * FROM tableA
是否有一种方法可以在不指定所有列的情况下从表中排除列?
SELECT * [except columnA] FROM tableA
我所知道的唯一方法是手动指定所有列并排除不需要的列。这真的很耗时,所以我正在寻找方法来节省时间和精力,以及未来的维护表应该有更多/更少的列。
我们都知道,要从表中选择所有列,可以使用
SELECT * FROM tableA
是否有一种方法可以在不指定所有列的情况下从表中排除列?
SELECT * [except columnA] FROM tableA
我所知道的唯一方法是手动指定所有列并排除不需要的列。这真的很耗时,所以我正在寻找方法来节省时间和精力,以及未来的维护表应该有更多/更少的列。
当前回答
这样做不是更简单吗:
sp_help <table_name>
点击“Column_name”列>复制>粘贴(创建一个垂直列表)到新建查询窗口,只需在每个列值前面键入逗号…注释掉你不想要的专栏。比这里提供的任何代码都要少得多,而且仍然是可管理的。
其他回答
No.
轻维护的最佳实践是只指定所需的列。
至少有两个原因:
这使得客户端和数据库之间的契约是稳定的。每次都是相同的数据 性能,涵盖指标
编辑(2011年7月):
如果您从对象资源管理器中拖动表的列节点,它会在查询窗口中为您放置一个CSV列列表,从而实现您的目标之一
如果您有许多列,而您只想排除其中一列。您可以使用下面的命令 从表中选择* exclude(列名)
试试这个…
=QUERY(TRANSPOSE(QUERY('Data'!A1:AH,"SELECT * ",1)),"SELECT * WHERE Col1 <> 'Column
name'",1)
您可以从devart.com获得SQL Complete,它不仅像Red Gate的SQL Prompt一样展开*通配符(如cairnz的回答所述),而且还提供了一个列选择器下拉复选框,您可以在选择列表中选中您想要的所有列,它们将自动为您插入(如果您然后取消选中某个列,它将自动从选择列表中删除)。
我不知道有任何数据库支持这个(SQL Server, MySQL, Oracle, PostgreSQL)。它绝对不是SQL标准的一部分,所以我认为你必须只指定你想要的列。
当然,您可以动态地构建SQL语句并让服务器执行它。但是这为SQL注入打开了可能性。