一个最简单的查询select * from table这样可以查出table表的所有字段.但是有个问题.假如我这个表有一百个字段,我只想查其中的九十九个必用字段(这些字段长度都很小,都是50以下)剩下的那一个字段在本次查询中我用不着,可是那个字段的长度又非常大(50000),很是影响速度.我总不能把这个九十九个字段名都打上吧.有没有简单的办法解决之.就是说:最好还能用通配符,并且不查询我指定的那个字段.

解决方案 »

  1.   

    --怕写错字段名,或懒得打:
    declare @columns varchar(2000)
    select @columns=isnull(@columns+',','')+name from syscolumns where id=object_id('表名') and name<>'不要的列' order by colid
    print @columns
    --复制
      

  2.   

    非常佩服楼上的,太历害了...这样都行???可是结果不是我要的啊...print @columns这样输出的结果是那些字段名而异.我要的是数据库查询结果我用 select @columns from table 查不出来.查出来全是那些字段名.最关键的是.我这语句是用在程序中的,不能写在存储过程里...
      

  3.   

    exec(' select ' + @columns + 'from 表名')
      

  4.   

    就是因为写在程序中,把字段名列表打印出来了,直接粘贴到代码里头,前面加select后面加from...where,减少因为打错字段名而出现的错误。也可以象4楼的方式处理,但既然写在代码里,就没必要这样用EXEC封装了。
      

  5.   

    --反正不用自己敲,字段名最好加[]限定,防止用关键字或非常规命名的字段出错:
    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 ...')
      

  6.   

    declare @str varchar(8000),
         @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)
      

  7.   

    例如:userno_fm、userno_to
    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
      

  8.   

    只能动态生成你要的field,再运行了.
    不过这样的要求不太现实
      

  9.   

    看来解决方法只有三种一是慢就慢点.还用 *二是一个个V上去.三是查syscolumns表用通配符 * 来实现一个字段不查询肯定是不行了?我是想能不能类似于这样实现select *(-'不要的字段名') from table如果有类似于这样的方法就爽啦.
      

  10.   

    昨夜小雨比较强,小陈的
      select @str=@str+','+name  from syscolumns where id=object_id(@tablename)
     and name<>@colname
    这句得不到预期结果,是不是搞漏了,应该是@str=isnull(@str+',','')+name。大家都很强啊,学到了系统表syscolumns的用法了。
      

  11.   

    不需要isnull, 因为上一次,已给@str赋过初值了.