我们都知道,要从表中选择所有列,可以使用
SELECT * FROM tableA
是否有一种方法可以在不指定所有列的情况下从表中排除列?
SELECT * [except columnA] FROM tableA
我所知道的唯一方法是手动指定所有列并排除不需要的列。这真的很耗时,所以我正在寻找方法来节省时间和精力,以及未来的维护表应该有更多/更少的列。
我们都知道,要从表中选择所有列,可以使用
SELECT * FROM tableA
是否有一种方法可以在不指定所有列的情况下从表中排除列?
SELECT * [except columnA] FROM tableA
我所知道的唯一方法是手动指定所有列并排除不需要的列。这真的很耗时,所以我正在寻找方法来节省时间和精力,以及未来的维护表应该有更多/更少的列。
当前回答
No.
轻维护的最佳实践是只指定所需的列。
至少有两个原因:
这使得客户端和数据库之间的契约是稳定的。每次都是相同的数据 性能,涵盖指标
编辑(2011年7月):
如果您从对象资源管理器中拖动表的列节点,它会在查询窗口中为您放置一个CSV列列表,从而实现您的目标之一
其他回答
这是我在这个例子中经常用到的
declare @colnames varchar(max)=''
select @colnames=@colnames+','+name from syscolumns where object_id(tablename)=id and name not in (column3,column4)
SET @colnames=RIGHT(@colnames,LEN(@colnames)-1)
@colnames看起来像column1,column2,column5
不,这是不可能的。如果在您的情况下可行,也许您可以创建自定义视图
如果你的数据库支持动态sql的执行,你可以写一个SP,把你不想看到的列传递给它,让它动态创建查询并返回结果给你。我认为这至少在SQL Server中是可行的
我知道这有点过时了,但我也遇到过同样的问题,正在寻找答案。然后我让一个高级开发人员给我展示了一个非常简单的技巧。
如果使用management studio查询编辑器,请展开数据库,然后展开从中选择的表,以便可以看到列文件夹。
在选择语句中,只需突出显示上面引用的列文件夹,并将其拖放到查询窗口中。它将粘贴表的所有列,然后简单地从列列表中删除标识列…
我不知道有任何数据库支持这个(SQL Server, MySQL, Oracle, PostgreSQL)。它绝对不是SQL标准的一部分,所以我认为你必须只指定你想要的列。
当然,您可以动态地构建SQL语句并让服务器执行它。但是这为SQL注入打开了可能性。
在SSMS中,智能感知和混叠是一种更简单的方法。试试这个 在文本编辑器中右键单击,并确保启用了智能感知。 输入一个别名[SELECT t.* FROM tablename t]的查询。 输入文本t.*并删除*,SSMS将自动列出以f为别名的表的列。 然后,您可以快速指定您想要的列,而不必使用SSMS将选择写入另一个脚本,然后执行更多的复制/粘贴操作。 我一直在用这个。