select identity(int,1,1) as idd,bb,cc into #t from test
select idd as id,bb,cc from #t where idd=3

解决方案 »

  1.   

    --用临时表啦:
    select id=identity(int,1,1),* into #tb from 表
    select * from #tb where id=3
    drop table #tb
      

  2.   

    也可以用类似下面的通用存储过程来查询:/*--用存储过程实现的分页程序 显示指定查询结果的第X页
    此存储过程针对无主键的情况,使用临时表的方法
    如果有主键,不推荐此方法--邹建 2003.09--*//*--调用示例
    exec p_show 'select * from 表',1,3  --对于你的情况用 exec p_show 'select * from xzkh_new..地区资料',5,2,'地区编号,地区名称,助记码','地区编号'
    --*/if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_show]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[p_show]
    GOCREATE Proc p_show
    @QueryStr nvarchar(1000), --查询语句,如果查询表,用:select * from 表
    @PageSize int=10, --每页的大小(行数)
    @PageCurrent int=1, --要显示的页
    @FdShow nvarchar (1000)='', --要显示的字段列表,如果查询结果有标识字段,需要指定此值,且不包含标识字段
    @FdOrder nvarchar (1000)='' --排序字段列表
    as
    declare @FdName nvarchar(50) --标识列名
    ,@Id1 varchar(20),@Id2 varchar(20) --开始和结束的记录号
    select @FdName='[ID_'+cast(newid() as varchar(40))+']'
    ,@Id1=cast(@PageSize*(@PageCurrent-1) as varchar(20))
    ,@Id2=cast(@PageSize*@PageCurrent-1 as varchar(20))
    ,@FdShow=case isnull(@FdShow,'') when '' then '*' else @FdShow end
    ,@FdOrder=case isnull(@FdOrder,'') when '' then '' else ' order by '+@FdOrder endexec('select '+@FdName+'=identity(int,0,1),'+@FdShow+'
    into #tb from('+@QueryStr+') a '+@FdOrder+'
    select '+@FdShow+' from #tb where '+@FdName+' between '
    +@Id1+' and '+@Id2
    )
    GO