从SQL分页行
我正在尝试完成我的新闻/博客ASP.net C#应用程序的编写,并且我在如何根据标记或关键字过滤项目后一次只返回10个项目。 这是我正在寻找的一个例子:
- 用户通过浏览到?tag = Pizza来查询sql
- 后端查找所有与查询字符串相等的标记(作为@参数发送)。 这部分我已经想通了。
-
现在我希望它从这个过滤后的语句中一次只返回10行。 当我没有过滤任何东西时,我很容易就能做到这一点:
sqlCommand.CommandText = "SELECT * FROM (SELECT row_number() over(ORDER BY news_id) AS row_number, * FROM news) T WHERE row_number BETWEEN (SELECT rowcnt FROM sys.sysindexes WHERE (id = OBJECT_ID('news')) AND (indid < 2))-(@start+10) AND (SELECT rowcnt FROM sys.sysindexes WHERE (id = OBJECT_ID('news')) AND (indid < 2))-(@start) ORDER BY news_id DESC"; sqlCommand.Parameters.Add("@start", SqlDbType.Int).Value = start;
-
然后,我在页面底部显示用户可以查看更多内容的选项。 (这部分很简单,因为我只需要将10添加到查询字符串?num =)。
实现这一目标的最佳方式是什么?
理解row_number如何对结果进行编号最初有点棘手。
看起来有两件事情让它变得更加复杂。 row_number函数必须与发生过滤的SELECT或外部SELECT相同 ,否则您将对整个表进行编号,而不是对结果进行编号。 在行被限制之前,您的查询对表中的所有结果进行了编号,因为row_number用于SELECT 内部的SELECT和WHERE。
其次,当你可以将一个DESC添加到row_number函数时,看起来你正在命中sys.indexes以获得行数(我不确定总是准确的)到反向的行号范围。
SELECT * FROM ( SELECT row_number() over(ORDER BY news_id DESC) AS row_number, * FROM news WHERE --user filter goes here news_cat = 'Pizza' ) AS T WHERE row_number BETWEEN @start AND @start + 10
请参阅有关SQL Server分页查询的以下问题:
等等。
我在2年前的codeproject上写了这篇文章,当分页支持在框架中仍然相当有限时,或许仍然是一个很好的参考。
如果您只关心数据,请查看我如何检索分页数据的部分。
https://www.codeproject.com/KB/aspnet/GridViewNeatPaging.aspx
上述就是C#学习教程:从SQL分页行分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1031868.html