declare @sql varchar(4000)
set @sql=''
select @sql=@sql+'['+name+'],'
from syscolumns
where id=object_id('t_moon')
and name not in('jd','pname','asum') 
set @sql=left(@sql,len(@sql)-1)
print('select jd,pname,'+@sql+',asum from t_moon')在表pname中的name都是1-31,当我查询出来时,它的排序就变了,并没有从1-31这样排,
请教一下各位大侠,应该怎样才能按数字的大小来排列呢?谢谢!

解决方案 »

  1.   

    declare @sql varchar(4000)
    set @sql=''
    select @sql=@sql+'['+name+'],'
    from syscolumns
    where id=object_id('t_moon')
    and name not in('jd','pname','asum') order by colid
    set @sql=left(@sql,len(@sql)-1)
    print('select jd,pname,'+@sql+',asum from t_moon')
      

  2.   

    加上排序条件 order by cast(name as int)
      

  3.   

    order by colid会按你建立表时候的字段顺序排序
      

  4.   

    try:declare @sql varchar(4000)
    set @sql=''
    select @sql=@sql+'['+name+'],'
    from syscolumns
    where id=object_id('t_moon')
    and name not in('jd','pname','asum') 
    set @sql=left(@sql,len(@sql)-1)
    print('select jd,pname,'+@sql+',asum from t_moon Order By pname')
      

  5.   

    select right('00'+name,2) from pname order by name
      

  6.   

    xeqtr1982(vesslan)的正解,
    谢谢楼上两位!
    请问:xeqtr1982(vesslan)
    colid是代表什么呢?它好像并不是关键字呢...
      

  7.   

    declare @sql varchar(4000)
    set @sql=''
    select @sql=@sql+'['+name+'],'
    from syscolumns
    where id=object_id('t_moon')
    and name not in('jd','pname','asum') 
    set @sql=left(@sql,len(@sql)-1)
    exec('select jd,pname,'+@sql+',asum from t_moon Order By pname')
    exec才看得到效果吧。另外,“表pname中的name都是1-31”,pname是字段啊,怎麼成了表了。
      

  8.   

    colid是syscolumns中的一列,表示你的列在表中的順序,執行看看
    Select colid,name From syscolumns Where  id=object_id('t_moon') Order By  colid