3 回答

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊
正如其他人所說,在查詢中執(zhí)行此操作并不是一個(gè)好主意,因?yàn)楫?dāng)有人在將來更改表結(jié)構(gòu)時(shí),它很容易出現(xiàn)問題。但是,有一種方法可以做到這一點(diǎn)......我無法相信我實(shí)際上在暗示這一點(diǎn),但本著回答實(shí)際問題的精神......
使用動(dòng)態(tài)SQL執(zhí)行此操作...這將執(zhí)行除“description”列之外的所有列。您可以輕松將其轉(zhuǎn)換為函數(shù)或存儲(chǔ)過程。
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貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊
DB2允許這樣做。列的屬性/說明符為Hidden。
從syscolumns文檔
HIDDEN
CHAR(1)NOT NULL WITH DEFAULT'N'
表示是否隱式隱藏了列:
P部分隱藏。SELECT *隱式隱藏該列。
N沒有隱藏。該列對(duì)所有SQL語句都可見。
創(chuàng)建表文檔作為創(chuàng)建列的一部分,您可以指定IMPLICITLY HIDDEN修飾符
來自示例DDL 隱式隱藏的列如下
CREATE TABLE T1
(C1 SMALLINT NOT NULL,
C2 CHAR(10) IMPLICITLY HIDDEN,
C3 TIMESTAMP)
IN DB.TS;
這種能力是否是推動(dòng)DB2采用的交易制定者,這仍然是未來讀者的一種練習(xí)。

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊
是否有任何RDBMS實(shí)現(xiàn)SELECT * EXCEPT之類的東西?
是的,Google Big Query實(shí)現(xiàn)SELECT * EXCEPT:
SELECT * EXCEPT語句指定要從結(jié)果中排除的一個(gè)或多個(gè)列的名稱。輸出中省略了所有匹配的列名稱。
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數(shù)據(jù)庫也支持SELECT * EXCEPT (col1, col2, ...)語法。
通配符表達(dá)式
SELECT語句中的通配符表達(dá)式。通配符表達(dá)式表示所有可見列??梢允褂每蛇x的EXCEPT子句排除某些列。
添加回答
舉報(bào)