我们都知道,要从表中选择所有列,可以使用
SELECT * FROM tableA
是否有一种方法可以在不指定所有列的情况下从表中排除列?
SELECT * [except columnA] FROM tableA
我所知道的唯一方法是手动指定所有列并排除不需要的列。这真的很耗时,所以我正在寻找方法来节省时间和精力,以及未来的维护表应该有更多/更少的列。
我们都知道,要从表中选择所有列,可以使用
SELECT * FROM tableA
是否有一种方法可以在不指定所有列的情况下从表中排除列?
SELECT * [except columnA] FROM tableA
我所知道的唯一方法是手动指定所有列并排除不需要的列。这真的很耗时,所以我正在寻找方法来节省时间和精力,以及未来的维护表应该有更多/更少的列。
当前回答
你可以创建一个包含你想要选择的列的视图,然后你可以从视图中选择*…
其他回答
不,这是不可能的。如果在您的情况下可行,也许您可以创建自定义视图
如果你的数据库支持动态sql的执行,你可以写一个SP,把你不想看到的列传递给它,让它动态创建查询并返回结果给你。我认为这至少在SQL Server中是可行的
Postgres sql有一种方法
请参考: http://www.postgresonline.com/journal/archives/41-How-to-SELECT-ALL-EXCEPT-some-columns-in-a-table.html
信息Schema Hack方法
SELECT 'SELECT ' || array_to_string(ARRAY(SELECT 'o' || '.' || c.column_name
FROM information_schema.columns As c
WHERE table_name = 'officepark'
AND c.column_name NOT IN('officeparkid', 'contractor')
), ',') || ' FROM officepark As o' As sqlstmt
对于我的特定示例表,上面的代码生成如下所示的sql语句
选择o.officepark、o.owner o.squarefootage 从办公室公园As o
就像其他人说的那样,没有办法做到这一点,但如果你使用Sql Server,我使用的一个技巧是将输出更改为逗号分隔,那么就这样做
select top 1 * from table
并从输出窗口中剪切整个列列表。然后你可以选择你想要的列,而不必把它们全部输入。
如果你想排除一个敏感的大小写列,例如密码,我这样做是为了隐藏值:
SELECT * , "" as password FROM tableName;
在SSMS中,智能感知和混叠是一种更简单的方法。试试这个 在文本编辑器中右键单击,并确保启用了智能感知。 输入一个别名[SELECT t.* FROM tablename t]的查询。 输入文本t.*并删除*,SSMS将自动列出以f为别名的表的列。 然后,您可以快速指定您想要的列,而不必使用SSMS将选择写入另一个脚本,然后执行更多的复制/粘贴操作。 我一直在用这个。