是否有任何RDBMS实现类似的东西SELECT * EXCEPT
?我所追求的是获取除特定TEXT/BLOB字段之外的所有字段,我只想选择其他所有字段.
几乎每天我都会向我的同事抱怨有人应该实现这个......它非常烦人,它不存在.
编辑:我理解大家的关注SELECT *
.我知道与之相关的风险SELECT *
.但是,至少在我的情况下,这不会用于任何生产级代码,甚至是开发级代码; 严格用于调试,当我需要轻松查看所有值时.
正如我在一些评论中所说,我工作的地方严格来说是一个命令行商店,在ssh上做一切.这使得很难使用任何gui工具(不允许与数据库的外部连接)等.
谢谢你的建议.
正如其他人所说,在查询中执行此操作并不是一个好主意,因为当有人在将来更改表结构时,它很容易出现问题.但是,有一种方法可以做到这一点......我无法相信我实际上在暗示这一点,但本着回答实际问题的精神......
使用动态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
在表上创建一个不包含blob列的视图
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采用的交易制定者,这仍然是未来读者的一种练习.
是否有任何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 | +-----------+----------+
是否有任何RDBMS实现SELECT*EXCEPT之类的东西
是! 真正的关系语言教程D允许以要删除的属性而不是要保留的属性来表示投影
my_relvar { ALL BUT description }
事实上,它相当于SQL的SELECT *
是{ ALL BUT }
.
您对SQL的建议是值得的,但我听说它已被用户组提交给SQL标准委员会并被供应商组拒绝:(
它也已明确请求SQL Server,但请求已关闭,因为"将无法修复".