实现 select * [except column] from tableName

问题描述有特定环境下,我们也许只知道某一列(或几列),而想获得除此列(几列)外的所有列的数据。

如已知如下circle表

表数据

可能只知道有一列(flag),欲获得除此列之外的数据。

预期结果如下:

预期结果


解决方案:

将问题进行分解:     

      1.获取除此列外所有列的名称;

      2.利用动态SQL,得到预期结果。

获取所有列名的方法:

方法一:

select name from syscolumns
where id = object_id('circle')

方法二:

select column_name 
from information_schema.columns
where table_name = 'circle'
对应上述二种获取列名的方法,便存在二种不同的解决方案。 吐舌头

方案一:

declare @columnNames varchar(max)
set @columnNames = ''
select @columnNames = @columnNames + name +','
from syscolumns
where id = object_id('circle') and name <>'flag'

--erase the last comma
set @columnNames = substring(@columnNames,1,len(@columnNames)-1);
exec('select ' + @columnNames +' from circle');
方案二:

declare @columnNames varchar(max)
set @columnNames = ''

select @columnNames = @columnNames+column_name +','
from information_schema.columns
where table_name = 'circle' and column_name <>'flag'

--erase the last comma
set @columnNames = substring(@columnNames,1,len(@columnNames)-1);
exec('select ' + @columnNames +' from circle');


结论:

      这种方式仅适用于特定条件下,如已知部分列的列名获取除已知部分列外的数据。因为这种方式本身效率不高,所以在已知所需列名时,不推荐使用这种方式获取数据,最好乖偷笑乖列出所有需要列的列名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值