SELECT * EXCEPT

是否有任何RDBMS实现类似的东西SELECT * EXCEPT?我所追求的是获取除特定TEXT / BLOB字段之外的所有字段,我只想选择其他所有字段。

几乎每天我都会向我的同事抱怨有人应该实现这个......它非常烦人,它不存在。

编辑:我理解大家的关注SELECT *。我知道与之相关的风险SELECT *。但是,至少在我的情况下,这不会用于任何生产级代码,甚至是开发级代码; 严格用于调试,当我需要轻松查看所有值时。

正如我在一些评论中所说,我工作的地方严格来说是一个命令行商店,在ssh上做一切。这使得很难使用任何gui工具(不允许与数据库的外部连接)等。

谢谢你的建议。


Cats萌萌
浏览 1188回答 3
3回答

白板的微信

正如其他人所说,在查询中执行此操作并不是一个好主意,因为当有人在将来更改表结构时,它很容易出现问题。但是,有一种方法可以做到这一点......我无法相信我实际上在暗示这一点,但本着回答实际问题的精神......使用动态SQL执行此操作...这将执行除“description”列之外的所有列。您可以轻松将其转换为函数或存储过程。declare @sql varchar(8000),&nbsp; &nbsp; @table_id int,&nbsp; &nbsp; @col_id intset @sql = 'select 'select @table_id = id from sysobjects where name = 'MY_Table'select @col_id = min(colid) from syscolumns where id = @table_id and name <> 'description'while (@col_id is not null) begin&nbsp; &nbsp; select @sql = @sql + name from syscolumns where id = @table_id and colid = @col_id&nbsp; &nbsp; select @col_id = min(colid) from syscolumns where id = @table_id and colid > @col_id and name <> 'description'&nbsp; &nbsp; if (@col_id is not null) set @sql = @sql + ','&nbsp; &nbsp; print @sqlendset @sql = @sql + ' from MY_table'exec @sql

慕容森

DB2允许这样做。列的属性/说明符为Hidden。从syscolumns文档HIDDEN&nbsp;CHAR(1)NOT NULL WITH DEFAULT'N'&nbsp;表示是否隐式隐藏了列:P部分隐藏。SELECT *隐式隐藏该列。N没有隐藏。该列对所有SQL语句都可见。创建表文档作为创建列的一部分,您可以指定IMPLICITLY HIDDEN修饰符来自示例DDL 隐式隐藏的列如下CREATE TABLE T1(C1 SMALLINT NOT NULL,C2 CHAR(10) IMPLICITLY HIDDEN,C3 TIMESTAMP)IN DB.TS;这种能力是否是推动DB2采用的交易制定者,这仍然是未来读者的一种练习。

繁花如伊

是否有任何RDBMS实现SELECT * EXCEPT之类的东西?是的,Google Big Query实现SELECT * EXCEPT:SELECT * EXCEPT语句指定要从结果中排除的一个或多个列的名称。输出中省略了所有匹配的列名称。WITH orders AS(&nbsp; SELECT 5 as order_id,&nbsp; "sprocket" as item_name,&nbsp; 200 as quantity)SELECT * EXCEPT (order_id)FROM orders;输出:+-----------+----------+| item_name | quantity |+-----------+----------+| sprocket&nbsp; | 200&nbsp; &nbsp; &nbsp; |+-----------+----------+编辑:H2数据库也支持SELECT * EXCEPT (col1, col2, ...)语法。通配符表达式SELECT语句中的通配符表达式。通配符表达式表示所有可见列。可以使用可选的EXCEPT子句排除某些列。
打开App,查看更多内容
随时随地看视频慕课网APP