假如一个表有30个字段,但我只想查其中的29个字段,应该怎么取?除了简单的select 字段1, ..., 字段29 from 表名 之外还有什么更简明的方法嘛?

解决方案 »

  1.   

    declare @sql varchar(1000)
    set @sql=''
    select top 29 @sql=@sql+','+name from syscolumns where id=object_id('表名')
    set @sql='select'+stuff(@sql,1,1,' ')+' from 表名'
    exec(@sql)
      

  2.   

    declare @col varchar(8000)
    select @col=''
    select top 29 @col=@col+','+name from syscolumns where id=object_id('表名') order by colid
    select @col=stuff(@col,1,1,'')
    exec('select '+@col+' from 表名')
      

  3.   

    declare @sql varchar(8000),
            @i int = 1 
    set @sql = ''
    while @i <30
    begin
    @sql + = ','+ col_name(object_id('表名'),@i)
    @i ++
    end
    set @sql = 'select ' + stuff(@sql,1,1,'') + 'from 表名'
    exec(@sql)
      

  4.   

    请问除了动态SQL没有别的方法了嘛?因为有些情况下我不需要的那个字段可能是任意一个,而这里的“表”也可能是一个结果集,这种情况下有什么简单的方法嘛?
      

  5.   

    可以先将所有字段组成合动态SQL,再将你不想要的字段用replace替换掉.
      

  6.   

    情况其实是这样的。我现在有个查询,因为某些原因需要用到rownumber。SQL Server在用RowNumber查询时会在结果集里加一列rowNum,现在我想把结果集里的rowNum那一列去掉。因为除了rowNum字段外其他字段很多,而且用rowNumber查询出来的结果集也不是一个具体的对象,所以觉得有些难度。