利用SQL未公开的存储过程实现分页(更加好用的一个!)
2004-07-23 12:34
831 查看
--在Sql查询分析器中执行一下脚本建立存储过程p_splitpage
--create procedure p_splitpage
if exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[p_splitpage]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_splitpage]
GO
--利用SQL未公开的存储过程实现分页
CREATE PROCEDURE P_SPLITPAGE
(
@SQL NVARCHAR(4000), --要执行的SQL语句
@CURRENTPAGE INT = 2, --要显示的页码
@PAGESIZE INT = 10, --每页的大小
@PAGECOUNT INT = 0 OUT --总页数
)
AS
SET NOCOUNT ON
DECLARE @P1 INT
EXEC SP_CURSOROPEN @P1 OUTPUT,@SQL,@SCROLLOPT = 1,@CCOPT = 1,@ROWCOUNT = @PAGECOUNT OUTPUT
SET @PAGECOUNT = CEILING(1.0 * @PAGECOUNT / @PAGESIZE)
SET @CURRENTPAGE = (@CURRENTPAGE-1) * @PAGESIZE + 1
--SELECT @CURRENTPAGE
EXEC SP_CURSORFETCH @P1,16,@CURRENTPAGE,@PAGESIZE
EXEC SP_CURSORCLOSE @P1
GO
--然后在程序中就可以用以下方式调用,具体的参数请参见上面的脚本
EXEC p_splitpage 'select top 1000 id,name from sysobjects',2,10
ASP中的调用
var db = new DB("Provider=SQLOLEDB.1;Password=mysa;Persist Security Info=True;User ID=sa;Initial Catalog=Northwind;Data Source=.");
var strSql = "SELECT * FROM Products ORDER BY ProductID DESC";
db.setCmdType(adCmdStoredProc);
db.setCmdText("p_splitpage");
db.addCmdParam(adVarChar,1000,strSql,"@SQL");
db.addCmdParam(adInteger,4,1,"@CURRENTPAGE");
db.addCmdParam(adInteger,4,10,"@PAGESIZE");
db.addCmdParam(adInteger,4,0,"@PAGECOUNT",adParamOutput);
//取得输出参数必须执行无返回值的exeCmd方法
//而不能输出值和记录集同时得到,因为这是ADO的限制! db.exeCmd();
var params = db.getCmdParameters();
for(var i=0;i<params.Count;i++)
Apps.printLn(params(i).Name + "," + params(i).Value);
//取得rs的方法
var rs = db.exeCmdRs();
if(rs != null)
{
rs = rs.NextRecordset();
}
for(;!rs.EOF;rs.MoveNext())
{
Apps.printLn(rs(1));
}
db.clear();
Apps.print(Globals.getUseTime());
--create procedure p_splitpage
if exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[p_splitpage]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_splitpage]
GO
--利用SQL未公开的存储过程实现分页
CREATE PROCEDURE P_SPLITPAGE
(
@SQL NVARCHAR(4000), --要执行的SQL语句
@CURRENTPAGE INT = 2, --要显示的页码
@PAGESIZE INT = 10, --每页的大小
@PAGECOUNT INT = 0 OUT --总页数
)
AS
SET NOCOUNT ON
DECLARE @P1 INT
EXEC SP_CURSOROPEN @P1 OUTPUT,@SQL,@SCROLLOPT = 1,@CCOPT = 1,@ROWCOUNT = @PAGECOUNT OUTPUT
SET @PAGECOUNT = CEILING(1.0 * @PAGECOUNT / @PAGESIZE)
SET @CURRENTPAGE = (@CURRENTPAGE-1) * @PAGESIZE + 1
--SELECT @CURRENTPAGE
EXEC SP_CURSORFETCH @P1,16,@CURRENTPAGE,@PAGESIZE
EXEC SP_CURSORCLOSE @P1
GO
--然后在程序中就可以用以下方式调用,具体的参数请参见上面的脚本
EXEC p_splitpage 'select top 1000 id,name from sysobjects',2,10
ASP中的调用
var db = new DB("Provider=SQLOLEDB.1;Password=mysa;Persist Security Info=True;User ID=sa;Initial Catalog=Northwind;Data Source=.");
var strSql = "SELECT * FROM Products ORDER BY ProductID DESC";
db.setCmdType(adCmdStoredProc);
db.setCmdText("p_splitpage");
db.addCmdParam(adVarChar,1000,strSql,"@SQL");
db.addCmdParam(adInteger,4,1,"@CURRENTPAGE");
db.addCmdParam(adInteger,4,10,"@PAGESIZE");
db.addCmdParam(adInteger,4,0,"@PAGECOUNT",adParamOutput);
//取得输出参数必须执行无返回值的exeCmd方法
//而不能输出值和记录集同时得到,因为这是ADO的限制! db.exeCmd();
var params = db.getCmdParameters();
for(var i=0;i<params.Count;i++)
Apps.printLn(params(i).Name + "," + params(i).Value);
//取得rs的方法
var rs = db.exeCmdRs();
if(rs != null)
{
rs = rs.NextRecordset();
}
for(;!rs.EOF;rs.MoveNext())
{
Apps.printLn(rs(1));
}
db.clear();
Apps.print(Globals.getUseTime());
相关文章推荐
- 利用SQL未公开的存储过程实现分页
- 利用SQL未公开的存储过程实现分页
- 利用SQL未公开的存储过程实现分页
- 一个利用sql 语句来实现分页的存储过程
- 利用SQL2000未公开的存储过程实现分页
- SQL:利用存储过程实现分页
- SQL Server通用分页存储过程:利用SQL Server未公开的存储过程实现
- 一个通用的分页存储过程实现-SqlServer(附上sql源码,一键执行即刻搭建运行环境)
- 一个简单的oracle分页存储过程的实现和调用
- 一个利用Sql Server 20005的 ROW_NUMBER Function 的分页存储过程.
- 利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- 利用SQL隐藏的存储过程分页
- 利用Sql作业在asp.net 里面实现异步调用存储过程.
- 一个SQL存储过程分页和ASP调用
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- 一个简单的oracle分页存储过程的实现和调用
- 利用SQL的游标存储过程分页
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页