表a
ID   Name    Sex
1    小红    女
2.   小刚    男表b
ID   score 
1     10
2     11select * from (select a.*,b.*,ROW_NUMBER() over (order by b.score asc) as rowrank from a,b where a.id=b.id) as tt where rowrank between 1 and 10这里报错,多次为 'tt' 指定了列 'ID'。大概意思应该是表a的id和表b的id,SqlServer识别不出来了
我知道可以把括号里的a.*,b.*换成 a.id as aid,a.name,a.sex,b.id as bid,b.score 
现在的问题是实际工作中表a和表b的列非常多,我不想全罗列出来.是否有其他办法呢,求高手.

解决方案 »

  1.   

    select * from (select a.*,b.score,ROW_NUMBER() over (order by b.score asc) as rowrank from a,b where a.id=b.id) as tt where rowrank between 1 and 10
      

  2.   

    declare @s varchar(8000)
    select @s=isnull(@s+',','')+quotename(name) from syscolumns where id=object_id('表名')
    print @s字段太多,可以用这个PRINT出来,省得一个个找
      

  3.   

    杯具,罗列出30多个字段,重名的还得别名,这sql语句费劲,维护也麻烦.真是IT民工啊
      

  4.   

    实在不行,就用动态SQL吧
    不过等你写出来,基本都手写各个字段出来了,可以试试
    sp_help '表名'
    辅助一下