varchar ( 255 ), -- 表名 @fldName varchar ( 255 ), -- 字段名 @PageSize int = 10 , -- 页尺寸 @PageIndex int = 1 , -- 页码 @IsCount bit = 0 , -- 返回记录总数, 非 0 值则返回 @OrderType bit = 0 , -- 设置排序类型, 非 0 值则降序 @strWhere varchar ( 5000 ) = '' -- 查询条件 (注意: 不要加 where) AS /**/ /**********************************Author:xutydate:20070706descript:解密exec sp_decrypt 'GetRecordFromPage' GetRecordFromPage得到Date:2007-07-06@strWhere:最多只能存3500字节,不然系统可能会出错 **********************************/ declare @strSQL varchar ( 7999 ) -- 主语句 declare @strTmp varchar ( 5000 ) -- 临时变量 declare @strOrder varchar ( 400 ) -- 排序类型 declare @counts int declare @strPageNum nvarchar ( 4000 ) declare @PageNum int if @OrderType != 0 begin set @strTmp = ' <(select min ' set @strOrder = ' order by [ ' + @fldName + ' ] desc ' end else begin set @strTmp = ' >(select max ' set @strOrder = ' order by [ ' + @fldName + ' ] asc ' end set @strSQL = ' select top ' + str ( @PageSize ) + ' * from [ ' + @tblName + ' ] where [ ' + @fldName + ' ] ' + @strTmp + ' ([ ' + @fldName + ' ]) from (select top ' + str (( @PageIndex - 1 ) * @PageSize ) + ' [ ' + @fldName + ' ] from [ ' + @tblName + ' ] ' + @strOrder + ' ) as tblTmp) ' + @strOrder if @strWhere != '' set @strSQL = ' select top ' + str ( @PageSize ) + ' * from [ ' + @tblName + ' ] where [ ' + @fldName + ' ] ' + @strTmp + ' ([ ' + @fldName + ' ]) from (select top ' + str (( @PageIndex - 1 ) * @PageSize ) + ' [ ' + @fldName + ' ] from [ ' + @tblName + ' ] where ' + @strWhere + ' ' + @strOrder + ' ) as tblTmp) and ' + @strWhere + ' ' + @strOrder -- if @PageIndex = 1 begin set @strTmp = '' if @strWhere != '' set @strTmp = ' where ' + @strWhere set @strSQL = ' select top ' + str ( @PageSize ) + ' * from [ ' + @tblName + ' ] ' + @strTmp + ' ' + @strOrder end if @IsCount != 0 set @strSQL = ' select count(*) as Total from [ ' + @tblName + ' ] ' if @strWhere != '' begin set @strPageNum = ' select @counts=count(*) from [ ' + @tblName + ' ] ' + ' where ' + @strWhere end else begin set @strPageNum = ' select @counts=count(*) from [ ' + @tblName + ' ] ' end exec sp_executesql @strPageNum ,N ' @Counts int out ' , @Counts out if @Counts <= @pageSize set @PageNum = 1 else set @PageNum = ( @Counts / @pageSize ) + 1 exec ( @strSQL ) select @PageNum GO