通用的分页存储过程
这个只要按照给定参数就可以实现分页效果,不过一次返回笔数是有调用者确定
![]()
Code
1
SET QUOTED_IDENTIFIER ON
2
GO
3
SET ANSI_NULLS ON
4
GO
5![]()
6![]()
7
ALTER PROCEDURE GetRecords
8
(@TableName varchar(15), ---表名
9
@KeyName varchar(30), ---key值欄位名
10
@ReturnFieldName varchar(300), ---返回欄位名集合
11
@Condition Varchar(1000), ---條件集合
12
@Order varchar(1000), ---排序集合
13
@RecordNum int, ---返回一頁的記錄數
14
@StartNO int, ---開始記錄數
15
@@RealNum INT OUTPUT, ---真實一頁返回筆數
16
@@TotalCount INT OUTPUT ) ---總共筆數
17
AS
18![]()
19
DECLARE @PreRecCount VARCHAR( 10 ) ---上次的筆數
20
DECLARE @CurRecCount VARCHAR( 10 ) ---當前的筆數
21![]()
22![]()
23
declare @ReturnTotal int ---回傳的總筆數
24
DECLARE @SQLStr NVARCHAR(500) ---回傳總筆數的SQL語句
25
set @SQLStr=N'SELECT @ReturnTotal=COUNT(*) FROM ' ---因為這個參數要求回傳所以處理不一樣,前者把變量寫在SQL語句中
26
set @SQLStr=@SQLStr+ @TableName +' WHERE 1=1 ' +@Condition ---直接讓變量轉化為值
27
exec sp_executesql @SQLStr,N'@ReturnTotal int output',
28
@ReturnTotal output
29
Set @@TotalCount=@ReturnTotal
30![]()
31
----返回該頁可以返回的真實筆數
32
IF @@TotalCount > ( @StartNO + 1 ) * @RecordNum
33
SET @@RealNum = @RecordNum
34
ELSE
35
SET @@RealNum = @@TotalCount - @StartNO * @RecordNum
36![]()
37
SET @CurRecCount = CAST( @StartNO * @RecordNum + @@RealNum AS VARCHAR( 10 ) )
38
IF @STARTNO = 0
39
EXEC( 'SELECT TOP ' + @RecordNum + @ReturnFieldName+' FROM '+@TableName+' WHERE 1=1 '+@Condition+' Order By '+@Order )
40
ELSE
41
BEGIN
42
SET @PreRecCount = CAST( @StartNO * @RecordNum AS VARCHAR( 10 ) )
43
EXEC( 'SELECT TOP ' + @RecordNum +' '+ @ReturnFieldName+ ' FROM '+@TableName+' WHERE 1=1 '+@Condition+' AND '+@KeyName+' NOT IN '
44
+ '(SELECT TOP ' + @PreRecCount + @KeyName+' FROM '+@TableName+' WHERE 1=1 '+@Condition+' Order By '+@Order+')' +' Order By '+@Order)
45
END
46![]()
47
print @PreRecCount
48
print @CurRecCount
49![]()
50
GO
51
SET QUOTED_IDENTIFIER OFF
52
GO
53
SET ANSI_NULLS ON
54
GO
55![]()
56


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56
