小编典典

SELECT * EXCEPT

sql

有没有实现类似RDBMS的东西SELECT * EXCEPT?我需要的是获取除特定TEXT / BLOB字段以外的所有字段,我只想选择其他所有内容。

几乎每天,我都向同事抱怨有人应该执行此操作……令人讨厌的是它不存在。

编辑: 我了解每个人的关注SELECT *。我知道与此相关的风险SELECT*。但是,至少在我看来,这不会用于任何生产级别代码,甚至开发级别代码;严格用于调试,当我需要轻松查看所有值时。

正如我在一些评论中所述,我的工作严格是命令行商店,通过ssh进行所有操作。这使得很难使用任何gui工具(不允许与数据库的外部连接)等等。

谢谢你的建议。


阅读 340

收藏
2021-05-05

共1个答案

小编典典

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

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

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
2021-05-05