实现 select * [except column] from tableName

来源:互联网 发布:电气编程是什么 编辑:程序博客网 时间:2024/05/29 04:33

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

如已知如下circle表

表数据

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

预期结果如下:

预期结果


解决方案:

将问题进行分解:     

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

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

获取所有列名的方法:

方法一:

select name from syscolumnswhere id = object_id('circle')

方法二:

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

方案一:

declare @columnNames varchar(max)set @columnNames = ''select @columnNames = @columnNames + name +','from syscolumnswhere id = object_id('circle') and name <>'flag'--erase the last commaset @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.columnswhere table_name = 'circle' and column_name <>'flag'--erase the last commaset @columnNames = substring(@columnNames,1,len(@columnNames)-1);exec('select ' + @columnNames +' from circle');


结论:

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

原创粉丝点击