当前位置: 首页 > news >正文

个人网站构建网站的元素

个人网站构建,网站的元素,网站用社交图标做链接侵权吗,无锡网站建设在哪里在 SQL Server 中,分页存储过程用于高效查询大量数据中的某一页记录(如网页中的分页展示)。以下是一个通用的分页存储过程实现,支持动态表名、排序、条件筛选,并返回总记录数,适用于大多数场景。分页存储过…

在 SQL Server 中,分页存储过程用于高效查询大量数据中的某一页记录(如网页中的分页展示)。以下是一个通用的分页存储过程实现,支持动态表名、排序、条件筛选,并返回总记录数,适用于大多数场景。

分页存储过程实现

该存储过程使用 ROW_NUMBER() 函数(兼容 SQL Server 2005+)实现分页,同时返回当前页数据和总记录数,方便前端计算总页数。

CREATE PROCEDURE usp_GetPagedData@TableName NVARCHAR(100),        -- 要查询的表名或视图名@OrderBy NVARCHAR(100),          -- 排序字段(如 'ID DESC, Name ASC')@PageIndex INT = 1,              -- 页码(默认第1页)@PageSize INT = 10,              -- 每页记录数(默认10条)@Where NVARCHAR(1000) = '',      -- 查询条件(如 'Status = 1 AND CreateTime > ''2023-01-01''')@TotalCount INT OUTPUT           -- 输出参数:总记录数
AS
BEGINSET NOCOUNT ON; -- 不返回计数信息,提升性能
​BEGIN TRY-- 拼接查询总记录数的SQLDECLARE @CountSql NVARCHAR(1000) = 'SELECT @Total = COUNT(*) FROM ' + @TableName + CASE WHEN @Where <> '' THEN ' WHERE ' + @Where ELSE '' END;
​-- 执行总记录数查询EXEC sp_executesql @CountSql, N'@Total INT OUTPUT', @Total = @TotalCount OUTPUT;
​-- 计算分页起始位置(ROW_NUMBER()从1开始)DECLARE @StartRow INT = (@PageIndex - 1) * @PageSize + 1;DECLARE @EndRow INT = @PageIndex * @PageSize;
​-- 拼接分页查询SQL(使用ROW_NUMBER()实现)DECLARE @PagedSql NVARCHAR(2000) = 'WITH PagedData AS (SELECT *, ROW_NUMBER() OVER (ORDER BY ' + @OrderBy + ') AS RowNum FROM ' + @TableName + CASE WHEN @Where <> '' THEN ' WHERE ' + @Where ELSE '' END + ')SELECT * FROM PagedData WHERE RowNum BETWEEN ' + CAST(@StartRow AS NVARCHAR) + ' AND ' + CAST(@EndRow AS NVARCHAR) + 'ORDER BY RowNum';
​-- 执行分页查询并返回结果EXEC sp_executesql @PagedSql;END TRYBEGIN CATCH-- 捕获并返回错误信息SELECT ERROR_NUMBER() AS ErrorNumber,ERROR_MESSAGE() AS ErrorMessage,ERROR_LINE() AS ErrorLine;END CATCH
END

存储过程参数说明

参数名类型说明
@TableNameNVARCHAR(100)必需,要查询的表名或视图名(如 'Customers'
@OrderByNVARCHAR(100)必需,排序条件(如 'ID DESC''CreateTime ASC, Name DESC'
@PageIndexINT可选,页码(默认 1,即第一页)
@PageSizeINT可选,每页记录数(默认 10 条)
@WhereNVARCHAR(1000)可选,查询条件(无需加 WHERE 关键字,如 'Status = 1'
@TotalCountINT OUTPUT输出参数,返回符合条件的总记录数(用于计算总页数)

使用示例

假设查询 Orders 表中,状态为 1(已付款)的订单,按创建时间倒序排列,查询第 2 页,每页 20 条记录:

DECLARE @Total INT; -- 接收总记录数
​
-- 调用分页存储过程
EXEC usp_GetPagedData@TableName = 'Orders',@OrderBy = 'CreateTime DESC',@PageIndex = 2,@PageSize = 20,@Where = 'Status = 1',@TotalCount = @Total OUTPUT;
​
-- 输出总记录数
PRINT '总记录数:' + CAST(@Total AS NVARCHAR);

执行后会返回两个结果:

  1. 第 2 页的 20 条订单数据;

  2. 总记录数(通过 @Total 输出)。

优化与注意事项

  1. 性能优化

    • 确保 @OrderBy 中使用的字段有索引(如 CreateTime 字段建立索引),避免全表扫描。

    • 对于超大表(千万级以上),可考虑使用OFFSET FETCH(SQL Server 2012+ 支持),语法更简洁:

      SELECT * FROM Orders
      WHERE Status = 1
      ORDER BY CreateTime DESC
      OFFSET (@PageIndex - 1) * @PageSize ROWS
      FETCH NEXT @PageSize ROWS ONLY;
  2. 安全注意

    • 该存储过程使用动态 SQL,存在 SQL 注入风险。生产环境中需验证 @TableName@OrderBy 等参数的合法性(如检查表名是否存在于系统表 sys.tables 中)。

  3. 复杂查询

    • 若需关联多表查询,可先创建视图,再对视图使用该存储过程。

  4. 总记录数

    • 总记录数 @TotalCount 可用于前端计算总页数(总页数 = CEILING(总记录数 / 每页条数))。

通过该存储过程,可灵活实现各种场景下的分页查询,兼顾兼容性和易用性。根据实际业务需求,可进一步扩展参数(如返回字段筛选、关联查询等)。

http://www.dtcms.com/a/615641.html

相关文章:

  • 优秀网站建设方案网站开发和运营合同分开签么
  • 三五互联网站管理登录地址网站页尾版权
  • C语言编译预处理 | 深入理解C语言预处理过程
  • 网站规划与栏目结构诊断小学生一分钟新闻播报
  • 甘肃网站建设推广长沙门户网站有哪些
  • 从零认识命名管道:命名管道全解析
  • 如何通过数字化手段提升优质中药饮片供应的效率?
  • 标准百度网站建设海口网站开发
  • 酒泉网站建设设计手机网站建设策划方案
  • 网站建设乙方义务三、网站开发使用软件环境
  • 展示网站建设的ppt用jquery做网站好吗
  • 企业建站费用情况企业主页的特点
  • 长沙专业建网站公司网站及数据库怎么做后门
  • 湖北省建设安全协会网站免费客户管理软件排行
  • 【LeetCode Hot 100】 136. 只出现一次的数字
  • 网站背景怎么设置云南企业网站开发
  • 企查查企业信息查询网站做网站属于程序员吗
  • 做网站电销话术虚拟主机和网站空间
  • 网站地图好处wordpress 无法显示
  • 当当网网站建设方案商务网站的类型一共有几大类
  • (119页PPT)智慧医院综合性智能化系统规划设计方案(附下载方式)
  • QT opencv通过轮廓坐标手工生成四边形案例详解
  • for dfs|二分
  • 第十六周Window的权限提升和维持
  • 怎么反编译易语言 | 深入了解反编译技术及其应用
  • 建设国外网站shanxi建设银行网站首页
  • 服务器搭建网站域名配置湖州营销网站建设
  • 深度学习Week1--数学基础 + 机器学习基础
  • 有没有做京东客好的网站推荐网站建设横幅系列素材
  • 站长工具短链接生成克拉玛依市住房和建设局网站