65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 TSQL 在 SQL Server 中进行分页

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.53/5 (25投票s)

2005 年 8 月 13 日

viewsIcon

71493

downloadIcon

754

通过将 T-SQL 查询作为输入提供给此通用存储过程,从而实现高效的 SQL Server 分页。

Sample Image - Easy_Sqlserver_paging.jpg

引言

通常,开发人员,特别是初学者或应用程序开发人员,在基于 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# 代码,展示如何使用它

 

© . All rights reserved.