sql server存储过程分页,行变列

CREATE PROCEDURE [dbo].[PROC_GetPriviousAndNextDetailContent]
@Index varchar(20),--表主键
@Table varchar(100),--从哪个表获取数据
@Columns varchar(100),--需要获取哪些字段
@OrderStr varchar(100),--排序字段及方式
@Where1    varchar(100),--row_number中的初步过滤条件
@Where2 varchar(100)--当前要查询详细内容的ID条件
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    declare @sql nvarchar(1000),@rowid int,@Previousid int,@Nextid int
    set @sql=N'select @rowid=rowindex from(select '+@Columns+',ROW_NUMBER() over(order by '+@OrderStr+')rowindex from '+@Table+' where '+@Where1+' )rt where '+@Where2
    --print @sql
    exec sp_executesql @sql,N'@rowid int output',@rowid=@rowid output
    --获取前一条ID
        set @sql=N'select @Previousid='+@Index+' from(select '+@Columns+',ROW_NUMBER() over(order by '+@OrderStr+')rowindex from '+@Table+' where '+@Where1+' )rt where rowindex='+cast((@rowid-1) as varchar)
exec sp_executesql @sql,N'@Previousid int output',@Previousid=@Previousid output
if @Previousid is null
set @Previousid=0
--获取后一条ID
  set @sql=N'select @Nextid='+@Index+' from(select '+@Columns+',ROW_NUMBER() over(order by '+@OrderStr+')rowindex from '+@Table+' where '+@Where1+' )rt where rowindex='+cast((@rowid+1) as varchar)
exec sp_executesql @sql,N'@Nextid int output',@Nextid=@Nextid output
if @Nextid is null
set @Nextid=0
--print @Previousid
--print @Nextid
--获取最后完整数据
exec('select '+@Columns+ ','+@Previousid+' Previousid,'+@Nextid+' Nextid from '+@Table+' where '+@Where2)
END
表结构:

Id   two    three

1        2        3

4        5        6

7        8        9

根据传入参数“4”查询结果:

1        7        5        6

posted @ 2014-06-17 21:01  BicycleBoy  阅读(326)  评论(0编辑  收藏  举报