SELECT (* - some_columns) FROM TABLE in SQL

3
我有一张包含很多列的表,我想在我的“select”查询中省略其中的几列。类似于select (* - columns_to_be_omitted) from myTable。除了在查询中列出所有其他列之外,还有其他方法可以实现吗?
这是一个一次性手动查询,所以我不太关心性能。更需要的是易用性。
5个回答

4

您无法在直接的SQL中完成此操作。最好的方法是编写一个存储过程(匿名或其他),构造动态SQL语句并执行。

您可以包括所有内容,也可以包括一些内容,但无法同时包括所有内容和排除某些内容(除非存在不同数据库的奇怪供应商扩展)。在MySQL中不存在这样的功能。


2
你不能这样做,最好的方法是使用像SQL Prompt这样的工具,如果你正在使用SQL Server Management Studio。

SQL Prompt将允许您执行SELECT * FROM MyTable,如果您将光标放在“*”之后并按Tab键,则SQL Prompt将枚举您表中的所有列,为您提供该表中所有列的列表,然后您可以删除不感兴趣的列。或者,您可以打开弹出式对话框,允许您从该表中选择任意数量的列,然后将它们插入到SELECT语句中。

很遗憾,这不是SSMS的默认功能 :-(

Marc


1
直到今天,我仍然无法理解微软是如何发布一个没有智能感知的IDE和管理工具的...现在我已经被纠正了,2008年有这个功能,而2005年则没有。
如果您拥有SQL管理工具,则可以使用“选择到新查询窗口”脚本,它将为您提供一个模板选择语句,您可以从中删除。只需右键单击表格即可。

1
服务器08的管理工作室具备智能感知功能。 - RC1140
我本来想给你的回答点个赞,但是我不能这样做,因为你的回答开头与问题没有任何关系。 - Jon Mitchell
SQL Server 2008 内置的不太好用。我更喜欢 Red Gate 的 SQL Prompt。 - gbn

0

没有直接的方法。您可以在select查询中提及想要的各个列,否则可以通过从表中选择性列创建一个临时表,并使用该临时表。


为什么不使用视图而不是临时表呢?(添加所有数据到临时表的麻烦似乎有点多...) - Thorsten

0
你可以通过对数据字典进行查询来动态构建列的列表。然后,你可以在 where 子句中添加你不想要的列的列表(例如 column-name not in ())。(不确定如何使用 cletus 建议的存储过程方法来实现这一点。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接