为了账号安全,请及时绑定邮箱和手机立即绑定

SELECT * EXCEPT

SELECT * EXCEPT

Cats萌萌 2019-09-03 16:19:07
是否有任何RDBMS实现类似的东西SELECT * EXCEPT?我所追求的是获取除特定TEXT / BLOB字段之外的所有字段,我只想选择其他所有字段。几乎每天我都会向我的同事抱怨有人应该实现这个......它非常烦人,它不存在。编辑:我理解大家的关注SELECT *。我知道与之相关的风险SELECT *。但是,至少在我的情况下,这不会用于任何生产级代码,甚至是开发级代码; 严格用于调试,当我需要轻松查看所有值时。正如我在一些评论中所说,我工作的地方严格来说是一个命令行商店,在ssh上做一切。这使得很难使用任何gui工具(不允许与数据库的外部连接)等。谢谢你的建议。
查看完整描述

3 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

正如其他人所说,在查询中执行此操作并不是一个好主意,因为当有人在将来更改表结构时,它很容易出现问题。但是,有一种方法可以做到这一点......我无法相信我实际上在暗示这一点,但本着回答实际问题的精神......


使用动态SQL执行此操作...这将执行除“description”列之外的所有列。您可以轻松将其转换为函数或存储过程。


declare @sql varchar(8000),

    @table_id int,

    @col_id int


set @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

    select @sql = @sql + name from syscolumns where id = @table_id and colid = @col_id


    select @col_id = min(colid) from syscolumns where id = @table_id and colid > @col_id and name <> 'description'

    if (@col_id is not null) set @sql = @sql + ','

    print @sql

end


set @sql = @sql + ' from MY_table'


exec @sql


查看完整回答
反对 回复 2019-09-03
?
慕容森

TA贡献1853条经验 获得超18个赞

DB2允许这样做。列的属性/说明符为Hidden。


从syscolumns文档


HIDDEN 

CHAR(1)NOT NULL WITH DEFAULT'N' 

表示是否隐式隐藏了列:


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采用的交易制定者,这仍然是未来读者的一种练习。


查看完整回答
反对 回复 2019-09-03
?
繁花如伊

TA贡献2012条经验 获得超12个赞

是否有任何RDBMS实现SELECT * EXCEPT之类的东西?


是的,Google Big Query实现SELECT * EXCEPT:


SELECT * EXCEPT语句指定要从结果中排除的一个或多个列的名称。输出中省略了所有匹配的列名称。


WITH orders AS(

  SELECT 5 as order_id,

  "sprocket" as item_name,

  200 as quantity

)

SELECT * EXCEPT (order_id)

FROM orders;

输出:


+-----------+----------+

| item_name | quantity |

+-----------+----------+

| sprocket  | 200      |

+-----------+----------+

编辑:


H2数据库也支持SELECT * EXCEPT (col1, col2, ...)语法。


通配符表达式


SELECT语句中的通配符表达式。通配符表达式表示所有可见列。可以使用可选的EXCEPT子句排除某些列。


查看完整回答
反对 回复 2019-09-03
  • 3 回答
  • 0 关注
  • 1185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信