SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO /**//* 名 称: pr_Common_PagedSelect 功 能: 获取指定页的数据 创建标识:2008-05-12 15:30 修改标识: 修改原因: */ CREATE PROCEDURE[dbo].pr_Common_PagedSelect @TableNamevarchar(255), -- 表名 @OrderFieldvarchar(255), -- 排序字段名 @SelectedFieldsvarchar(255), -- 选择字段名 @PageSizeint, -- 页尺寸 @PageIndexint, -- 页码 @OrderTypebit, -- 设置排序类型, 非 0 值则降序 @Conditionvarchar(2000) -- 查询条件 (注意: 不要加 where) AS declare@strSQLvarchar(6000) -- 主语句 declare@strTmpvarchar(1000) -- 临时变量 declare@strOrdervarchar(500) -- 排序类型 if@OrderType!=0 begin set@strTmp='<(select min' set@strOrder=' order by ['+@OrderField+'] desc' end else begin set@strTmp='>(select max' set@strOrder=' order by ['+@OrderField+'] asc' end set@strSQL='select top '+str(@PageSize) +''+@SelectedFields+' from [' +@TableName+'] where ['+@OrderField+']'+@strTmp+'([' +@OrderField+']) from (select top '+str((@PageIndex-1)*@PageSize) +' [' +@OrderField+'] from ['+@TableName+']'+@strOrder+') as tblTmp)' +@strOrder if@Condition!='' Begin set@strSQL='select top '+str(@PageSize) +''+@SelectedFields+' from [' +@TableName+'] where ['+@OrderField+']'+@strTmp+'([' +@OrderField+']) from (select top '+str((@PageIndex-1)*@PageSize) +' [' +@OrderField+'] from ['+@TableName+'] where '+@Condition+'' +@strOrder+') as tblTmp) and '+@Condition+''+@strOrder End if@PageIndex=1 begin set@strTmp='' if@Condition!='' set@strTmp=' where ('+@Condition+')' set@strSQL='select top '+str(@PageSize) +''+@SelectedFields+' from [' +@TableName+']'+@strTmp+''+@strOrder end exec (@strSQL) --获取记录集 GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO