学习问题参考/解决/保留

自我控制应当成为生活的基调, 美好生活是理性来指导的并且紧紧抓住崇高的理想, 人的一生,就是进行尝试,尝试得越多,生活就越美好!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

通用分页存储过程

Posted on 2007-08-30 14:18  下载软件  阅读(185)  评论(0)    收藏  举报
CREATE PROCEDURE p_page
@pagesize INT,
@page INT,
@table NVARCHAR(50),
@field NVARCHAR(1000),
@where NVARCHAR(1000),
@order NVARCHAR(1000),
@key NVARCHAR(50),
@recordcount_out INT OUTPUT,
@pagecount_out INT OUTPUT
 AS
DECLARE @sqlstring NVARCHAR(3500)
-- 总记录数
DECLARE @recordcount INT
SELECT @sqlstring = 'SELECT COUNT(*) AS record_count FROM '+ @table

-- 创建临时表取得总记录数
CREATE TABLE #tmptable(record_count INT)
INSERT INTO #tmptable EXEC(@sqlstring)
SELECT @recordcount = record_count FROM #tmptable

-- 总页数
DECLARE @pagecount INT
IF @recordcount > 0
BEGIN
IF @recordcount % @pagesize > 0
SELECT @pagecount = @recordcount / @pagesize + 1
ELSE
SELECT @pagecount = @recordcount / @pagesize
END
ELSE
SELECT @pagecount = 0

-- 输出参数
SELECT @recordcount_out = @recordcount
SELECT @pagecount_out = @pagecount

-- 组合查询语句
DECLARE @sqlson NVARCHAR(3500)
DECLARE @sqlfarther NVARCHAR(3500)
-- 条件检查
IF LEN(LTRIM(@where)) = 0
SELECT @where = ''
ELSE
SELECT @where = ' WHERE '+ @where
-- 排序检查
IF LEN(LTRIM(@order)) = 0
SELECT @order = ''
ELSE
SELECT @order = ' ORDER BY '+ @order

SELECT @sqlson = 'SELECT TOP '+ CAST((@page - 1) * @pagesize AS NVARCHAR(10)) +' '+ @key + ' FROM '+ @table + @where + @order
SELECT @sqlfarther = 'SELECT TOP '+ CAST(@pagesize AS NVARCHAR(10)) +' '+ @field +' FROM '+ @table + @where
IF LEN(LTRIM(@where)) = 0
SELECT @sqlstring = @sqlfarther +' WHERE '+ @key +' NOT IN('+ @sqlson +')'+ @order
ELSE
SELECT @sqlstring = @sqlfarther +' AND '+ @key +' NOT IN('+ @sqlson +')'+ @order
--PRINT @sqlstring
EXEC(@sqlstring)
GO


在查询管理器中调用

DECLARE @recordcount INT
DECLARE @pagecount INT
exec p_page 1,1,'employer','*','','','[key]',@recordcount OUTPUT,@pagecount OUTPUT
select @recordcount,@pagecount

至于分页的代码。。自行解决。。