一个最简单的查询select * from table这样可以查出table表的所有字段.但是有个问题.假如我这个表有一百个字段,我只想查其中的九十九个必用字段(这些字段长度都很小,都是50以下)剩下的那一个字段在本次查询中我用不着,可是那个字段的长度又非常大(50000),很是影响速度.我总不能把这个九十九个字段名都打上吧.有没有简单的办法解决之.就是说:最好还能用通配符,并且不查询我指定的那个字段.
调试欢乐多
declare @columns varchar(2000)
select @columns=isnull(@columns+',','')+name from syscolumns where id=object_id('表名') and name<>'不要的列' order by colid
print @columns
--复制
declare @columns varchar(2000)
select @columns=isnull(@columns+',','')+'['+name+']' from syscolumns where id=object_id('表名') and name<>'不要的列' order by colid
print @columns--复制或exec
exec ('select '+@columns+' from 表名 where ...')
@colname varchar(100),--不想要的列名
@tablename varchar(100) --要查询的表名
select @str='',
@colname='...',--在此赋不要的列名
@tablename='...' --在此赋要查询表名
select @str=@str+','+name from syscolumns where id=object_id(@tablename)
and name<>@colnameselect @str='select '+stuff(@str,1,1,'')+' from '+@tablename
exec(@str)
create table test(
num int identity(1,1),
userno_fm varchar(10),
userno_to varchar(10),
username varchar(10))
select * from testdeclare @sql varchar(8000)
select @sql=''
select @sql=@sql+','+[name] from
(select [name] from syscolumns where object_id(N'[test]')=[id] and [name] not in ('userno_fm','userno_to')) A set @sql='select '+stuff(@sql,1,1,'')+' from [test]'
--print @sql
exec (@sql)drop table test
不过这样的要求不太现实
select @str=@str+','+name from syscolumns where id=object_id(@tablename)
and name<>@colname
这句得不到预期结果,是不是搞漏了,应该是@str=isnull(@str+',','')+name。大家都很强啊,学到了系统表syscolumns的用法了。