使用 TSQL 在 SQL Server 中进行分页






1.53/5 (25投票s)
2005 年 8 月 13 日

71493

754
通过将 T-SQL 查询作为输入提供给此通用存储过程,从而实现高效的 SQL Server 分页。
引言
通常,开发人员,特别是初学者或应用程序开发人员,在基于 Web 或桌面应用程序中实现分页时会遇到问题。
有两种分页概念:
- 在数据库级别
- 在应用程序级别
大多数开发人员在应用程序层应用分页,这对于以 Web 为中心的应用程序来说不是一个好主意,因为在 BLL/DLL 级别查询数据库然后创建页面总是很费力的。
在数据库级别(即在存储过程中)进行分页通常需要更多的工作和时间,这就是为什么大多数开发人员不愿选择这种方式的原因。
简而言之,我创建了一个通用的存储过程,它将完成所有这些繁琐的工作,并且足以处理大多数使用 T-SQL 语法的查询。现在您不需要为分页创建单独的存储过程了:)
快乐编码,干杯!!!
--- Input Parameters @Tables varchar(1000), @PK varchar(100), @JoinStatements varchar(1000)='', @Fields varchar(5000) = '*', @Filter varchar(5000) = NULL, @Sort varchar(200) = NULL, @PageNumber int = 1, @PageSize int = 10, @TotalRec int =0 Output, @Group varchar(1000) = NULL
将语句视为查询
SELECT [Order Details].UnitPrice, [Order Details].ProductID, Products.ProductName, Products.CategoryID, Products.SupplierID, Categories.Description, Categories.CategoryName,
Categories.Picture FROM [Order Details] INNER JOIN Products
ON [Order Details].ProductID = Products.ProductID INNER JOIN Categories
ON Products.CategoryID = Categories.CategoryID
示例变量赋值
@tables specify first joining table Which is [Order Details] @PK is [Order Details].OrderID @JoinStatements is INNER JOIN Products ON [Order Details].ProductID = Products.ProductID INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID @Fields is [Order Details].UnitPrice, [Order Details].ProductID, Products.ProductName, Products.CategoryID, Products.SupplierID, Categories.Description ,Categories.CategoryName, Categories.Picture @TotalRec will return how much records are in table soyou can calculate total pages Formula is simple CEILING (@TotalRec/@PageSize) And so on ..
我很快会上传示例 C# 代码,展示如何使用它