上海吸血鬼事件视频:分页存储过程(sql2000通用型)

来源:百度文库 编辑:偶看新闻 时间:2024/05/09 17:52:06
--名称:分页存储过程(sql2000通用型)
--使用示例 
--  Declare @start int
--  EXEC  dbo.sp_page '*','s_admin where iid>=7','order by logintimes desc',30,1, @start out
--  print @start
--注意 
--目前还没有对输入的参数进行严格的验证
--默认为输入都是合法有效的

ALTER PROCEDURE dbo.sp_page
(
 @fields varchar(800)    --SELECT 后面 FROM 前面 的 字段 不用包含SELECT
,@sqlFrom varchar(800)   --FROM 后面 的 字段 不包含FROM
,@sqlOrderBy varchar(800) -- Order By 后面的字符,包括Order By 
,@pageSize int -- 每页数据行数
,@pageIndex int --要转到的页码
,@records int OUTPUT  -- 当前查询条件下的总记录数
)
 
AS
BEGIN

Declare @sqlStr nvarchar(800)

-- 取得总记录数
set @sqlStr='select @records = count(*)  from ' + @sqlFrom
--执行@sql中的语句
exec sp_executesql @sqlStr
  ,N'@records varchar(1000) out'  --表示@sqlStr中的语句包含了一个输出参数
  ,@records out                   --和调用存储过程差不多,指定输出参数值

-- 根据每页数据行数 和 要转到的页码 得到 数据起止点
Declare @start int
Declare @end int
set @end = @pageSize * @pageIndex
set @start = @pageSize * (@pageIndex - 1) + 1

-- 临时表名称 可随机命名
Declare @tmpTable varchar(12)
SET @tmpTable ='#tmp'+ left(newid(),8)


-- 创建数据源到临时表
SELECT @sqlStr = 'SELECT Identity(int,1,1) AS RowIndex, * INTO  '+ @tmpTable 
SELECT @sqlStr = @sqlStr + ' FROM (SELECT TOP ' + Convert(char,@end )+ @fields + ' FROM ' + rtrim(@sqlFrom) + ' '+ rtrim(@sqlOrderBy) + ') A'
-- 查询临时表 得到所需要的数据
SELECT @sqlStr = @sqlStr + ' '+'SELECT '+ rtrim(@fields) +' FROM ' + @tmpTable 
SELECT @sqlStr = @sqlStr + ' WHERE  RowIndex BETWEEN ' + Convert(char,@start) + ' AND ' + Convert(char,@end)
-- 删除临时表
SELECT @sqlStr = @sqlStr + ' '+'DROP TABLE '+@tmpTable
EXEC (@sqlStr)

END

    RETURN