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
至于分页的代码。。自行解决。。
@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
至于分页的代码。。自行解决。。
浙公网安备 33010602011771号