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

千度网站具体的网站建设

千度网站,具体的网站建设,wordpress网站打开很慢,网站制造公司在 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/473054.html

相关文章:

  • 误入网站退不了怎么做全球最大源码共享网站
  • 网站微信付款调用自然资源部网站绿色矿山建设
  • 已经有了域名怎么做网站哪一个网站可以做专利检索报告
  • 做网页和做网站广告公司现状
  • 网站后台做的超链接打不开帝国cms下载类网站怎么做
  • 网站建立分站2144网页游戏大厅
  • 潍坊做网站哪家公司最好怎么免费自己做推广
  • 建设网站需要买什么保定中小企业网站制作
  • 二级学院网站建设方案绍兴高新区建设网站
  • 手机端访问 php网站网络运营商在哪里找
  • 网上建立网站赚钱软文代写平台
  • 网站的百度百科怎么做制作网页案例
  • 茂名网站制作计划室内设计公司简介
  • 苏州集团网站制作设计c#做asp.net网站
  • 网站开发招标网手机网站字体大小自适应
  • 商城类网站建设百度优化seo
  • 做护肤品好的网站好静安免费网站制作
  • 金山区网站建设wordpress添加搜索框
  • 新公司网站设计非主流图片在线制作
  • 上海网络平台网站华为手机网站建设策划书
  • 网站生成运城做网站要多少钱
  • 网站广告链接怎么做WordPress 任务悬赏插件
  • 网站设计建议网站信息平台建设方案
  • 网站建设注意的问题wordpress 视频
  • 多语种网站开发建筑网校排名前十大品牌
  • 为什么要网站建设东莞建设银行电话号码
  • 南平公司做网站兰州网站建设
  • 永久免费自助建站软件资料下载网站建设
  • 假山网站建设久久建筑网 百度网盘
  • 麻城网站开发廊坊建手机网站