create PROCEDURE [dbo].[SP_Integration_Task_SelectALL] @startindex int=0,--从那条开始选 @pagesize int=9999999,--每页显示几条 @totalcount int=0 output--总共有几条记录 ... ### 如何创建分页的存储过程 在数据库应用开发中,分页是非常常见的需求之一,尤其是在数据量较大的情况下,为了提高用户体验以及减轻服务器压力,合理的分页策略是必不可少的。本文将详细介绍如何创建一个用于分页查询的存储过程,并通过具体的代码示例来解释其工作原理。 #### 存储过程概述 存储过程是一种存储在数据库中的预先编译好的SQL程序,它可以接受参数并返回结果。使用存储过程可以提高应用程序的性能,因为它们只需要编译一次就可以被多次调用,此外还可以增强代码的安全性和可重用性。 #### 分页存储过程实现 分页查询通常需要以下三个参数: - `@startindex`:表示从哪一条记录开始查询。 - `@pagesize`:表示每页显示多少条记录。 - `@totalcount`:输出参数,用于返回符合条件的记录总数。 以下是一个具体的例子: ```sql CREATE PROCEDURE [dbo].[SP_Integration_Task_SelectALL] @startindex INT = 0, -- 从哪一条开始选 @pagesize INT = 9999999, -- 每页显示几条 @totalcount INT = 0 OUTPUT -- 总共有多少条记录 AS BEGIN -- 创建一个临时表来存储带有行号的查询结果 SELECT ROW_NUMBER() OVER (ORDER BY ID) AS RowNum, Name, Content INTO #Temp FROM People -- 从临时表中选择指定范围内的数据 SELECT * FROM #Temp WHERE RowNum > @startindex AND RowNum <= @startindex + @pagesize -- 计算总的记录数 SELECT @totalcount = COUNT(*) FROM dbo.T_INTEG_TASK_MAIN WHERE TaskDefineTime BETWEEN @TaskDefineTime AND @toRuntime END ``` ### C#中的调用方式 在客户端(例如ASP.NET)中,可以通过ADO.NET来调用上面定义的存储过程。下面是一个使用C#语言的例子: ```csharp public DataTable GetPolicyTreeByCode(DataAccess da, string parentCode, string languageCode, out int resultCount, int start, int limit) { resultCount = 0; string sql = "SP_PolicyTree_List"; SqlParameter[] param = new SqlParameter[] { new SqlParameter("@Parent_Code", parentCode), new SqlParameter("@LanguageCode", languageCode), new SqlParameter("@startindex", start), new SqlParameter("@pagesize", limit), new SqlParameter("@totalcount", resultCount) }; // 设置最后一个参数为输出参数 param[param.Length - 1].Direction = ParameterDirection.Output; DataTable dt = da.ExecuteDataSet(CommandType.StoredProcedure, sql, param).Tables[0]; // 获取输出参数的值 resultCount = Convert.ToInt32(param[param.Length - 1].Value); return dt; } ``` ### 复杂查询的分页处理 在实际应用中,可能还需要考虑更复杂的查询条件。例如,在下面的SQL示例中,我们需要根据多个字段进行过滤,并对查询结果进行分页处理: ```sql IF (@status = 0) -- 如果状态为0,则执行全量查询 BEGIN SELECT DISTINCT pur.[Purchase_Id], pur.[Purchase_Time], pur.[Machine_No], pur.[Purchase_Type], pur.[Suppliers_Name], pur.[Employee_Name], pur.[Bill_Type] INTO #temp1 FROM T_PURCHASE pur -- 主表 INNER JOIN T_PURCHASE_PRODUCT pur_pro ON pur.Purchase_Id = pur_pro.Purchase_Id INNER JOIN T_PRODUCT pro ON pur_pro.Product_Guid = pro.Product_Guid WHERE pur.Purchase_Id LIKE '%' + @Purchase_Id + '%' AND pur.Suppliers_Name LIKE '%' + @Suppliers_Name + '%' AND pur.Employee_Name LIKE '%' + @Employee_Name + '%' AND pur.Purchase_Time BETWEEN @Purchase_Time1 AND @Purchase_Time2 AND pro.Product_Name LIKE '%' + @Product_Name + '%' AND pro.Product_Id LIKE '%' + @Product_Id + '%' AND pro.Product_Category LIKE '%' + @Product_Category + '%' -- 对结果进行排序并添加行号 SELECT ROW_NUMBER() OVER (ORDER BY Purchase_Id) AS RowNum, * INTO #temp2 FROM #temp1 -- 查询指定范围内的数据 SELECT * FROM #temp2 WHERE RowNum > @startindex AND RowNum <= @startindex + @pagesize -- 计算总的记录数 SELECT @counts = COUNT(*) FROM #temp2 END ``` 以上代码展示了如何在一个存储过程中实现复杂的分页逻辑,包括多表联接、条件过滤等操作。这种分页方法不仅可以提高查询效率,还可以有效地管理数据库资源,特别是在处理大量数据时尤为重要。









create PROCEDURE [dbo].[SP_Integration_Task_SelectALL]
@startindex int=0,--从那条开始选
@pagesize int=9999999,--每页显示几条
@totalcount int=0 output--总共有几条记录
AS
begin
select ROW_NUMBER() over (order by id) as rownum, name,content
into #temp
from people
select * from #temp where rownum>@startindex AND rownum<=@startindex+@pagesize
SELECT @totalcount=count(*) from dbo.T_INTEG_TASK_MAIN where TaskDefineTime between @TaskDefineTime and @toRuntime
end
2.CS代码
public DataTable GetPolicyTreeByCode(DataAccess da, string parentCode, string languageCode, out int resultCount, int start, int limit)
{
resultCount = 0;
string sql = "SP_PolicyTree_List";
SqlParameter[] param = new SqlParameter[]
{
new SqlParameter("@Parent_Code",parentCode),
new SqlParameter("@LanguageCode",languageCode),
new SqlParameter("@startindex",start),
new SqlParameter("@pagesize",limit),
new SqlParameter("@totalcount",resultCount)
};
param[param.Length - 1].Direction = ParameterDirection.Output;

- hubeihts2011-10-14怎么调用这过程呢,谢谢
- dahaizwl2013-04-16咋弄的 ?写的存储过程分页?

- 粉丝: 7
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 网络环境下教育教学的探索与实施.docx
- Ahdqyln计算机专业大学本科方案设计书(网络).doc
- 数据库课程设计(实例-).doc
- 单片机万年历电子钟方案设计书报告含电路图和源程序.doc
- 2010年9月全国计算机等级测验二级笔试试卷C语言程序设计.docx
- workerman-PHP资源
- 计算机软件应用与发展分析.docx
- 麻村砂石加工系统安全渡汛措施.doc
- 论网络环境中的图书馆藏书发展.docx
- 一级分类食品饮料、家居用品、个人用品、IT与电子商务、耐用品.doc
- 工作任务8-网站宣传与推广.ppt
- 基于大学城空间的动态网页课程信息化教学设计.docx
- ATS单片机的数字温度测量及显示系统设计方案.doc
- 贫困地区的教育信息化发展障碍及对策.docx
- 论大数据对高校教育的推动作用.docx
- Freescale单片机电池管理系统设计方案.doc


