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語句中的通配符表達式。通配符表達式表示所有可見列??梢允褂每蛇x的EXCEPT子句排除某些列。
添加回答
舉報