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
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采用的交易制定者,这仍然是未来读者的一种练习。
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子句排除某些列。
添加回答
举报