日期:2014-05-18  浏览次数:20483 次

*号查询且想去掉其中的一列?应该怎么写?解决就结
例如:
select   *   from   table1
假设table1中有字段f1,f2,f3,但我不想要f3应该怎么写?
 
我一定要*,因为字段超多  
我记得以前在这里看到过有个去除某个字段的方法    


------解决方案--------------------
好像有难度
其实把所有的字段都列出来也不难啊,然后去掉不想要的就可以了。
在查询分析器中可以直接把所有的列名拖动到编辑窗口啊。
用鼠标左键,按住列那个文件夹就可以把所有的列名拖出来。跟托表名差不多。
------解决方案--------------------
create table tb070209xx
(f1 int, f2 int, f3 int
)
go
create proc pc070209
(
@表名 varchar(100),
@去掉的字段 varchar(100)
)
as
declare @sql varchar(8000)
select @sql = ' '
select @sql =@sql+ ', '+ name from syscolumns where object_id(@表名)=id and name <> @去掉的字段
select @sql = 'select '+stuff(@sql,1,1, ' ')+ ' from '+@表名
exec (@sql )
print @sql
go


EXEC pc070209 'tb070209xx ', 'f3 '

go


drop proc pc070209
drop table tb070209xx



------解决方案--------------------
declare @d varchar(100)
set @d= 'select '
select @d=@d+[name]+ ', ' from syscolumns where id=object_id( '表 ')and name <> '列 '--不要的列
set @d=substring(@d,1,len(@d)-1)+ ' from 表 '
exec(@d)
------解决方案--------------------
建议还是把字段名列出来,如果写*的话,如果以后表结构修改了(增加了好多字段),你不是还要再来一次?
------解决方案--------------------
以authors表为例

declare @sql varchar(4000)
set @sql= ' '

select @sql=@sql+ ',[ '+name+ '] '
from syscolumns
where id=object_id( 'authors ') and name not in( 'city ', 'address ')--这里写下你不想要的列
order by colid

set @sql= 'select '+substring(@sql,2,len(@sql))+ ' from authors '
print @sql
exec(@sql)