版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
一、SQL SERVER 2012及以上版本
1.语法示例
-
DECLARE @PageSize
INT =
10
--分页显示数据行数
-
DECLARE @PageIndex
INT =
1
--页码
-
DECLARE @NoRows
INT
-
SET @NoRows = (@PageIndex
-1)+@PageSize
--需要舍弃的行数
-
SELECT *
--查询列
-
FROM AddressBook_GroupPerson
--查询表
-
WHERE
1=
1
--查询条件
-
ORDER
BY
ID
DESC
--排序
-
OFFSET @NoRows
ROWS
--舍弃行
-
FETCH
NEXT @PageSize
ROWS
ONLY
--继续往下读取行
2.分页存储过程
-
CREATE
PROCEDURE [dbo].[UP_SplicPage]
-
@TableName
VARCHAR(
MAX) =
'',
--表名
-
@GetFields
VARCHAR(
MAX) =
'*',
--需要返回的列
-
@OrderBy
VARCHAR(
500),
--排序的字段名
-
@KeyID
VARCHAR(
50),
--主键字段或其他建立索引字段
-
@PageSize
INT =
10,
--页面尺寸
-
@PageIndex
INT =
1,
--页码
-
@StrWhere
VARCHAR(
MAX) =
'',
--查询条件(不需加where)
-
@TotalCount
INT
OUTPUT
--返回总行数
-
AS
-
BEGIN
-
SET NOCOUNT
ON;
-
DECLARE @
SQL
NVARCHAR(
MAX),@SQLCount
NVARCHAR(
MAX),@NotPageSize
VARCHAR(
50)
-
--排序
-
IF @OrderBy=
''
SET @OrderBy=
' ORDER BY ['+@KeyID+
'] DESC '
-
ELSE
SET @OrderBy =
' ORDER BY ' + @OrderBy
-
--查询条件
-
IF @StrWhere=
''
SET @StrWhere=
' 1=1 '
-
-
------获取分页数据-----------
-
SET @NotPageSize=
CONVERT(
VARCHAR(
50),(@PageIndex
-1)*@PageSize)
-
SET @
SQL=
'SELECT '+@GetFields+
' FROM '+@TableName+
' WHERE '+@StrWhere+
' '+@OrderBy
-
SET @
SQL+=
' OFFSET '+@NotPageSize+
' ROWS'
--舍去的行数
-
SET @
SQL+=
' FETCH NEXT '+
CONVERT(
VARCHAR,@PageSize)+
' ROWS ONLY'
--舍去后,再向后读取的行数
-
--PRINT @SQL
-
EXEC(@
SQL)
-
-----------------------------
-
-
------获取表中有好多行-------
-
SET @SQLCount=
'SELECT @COUNT=COUNT(1) FROM '+@TableName+
' WHERE '+@StrWhere
-
--PRINT @SQLCount
-
EXEC SP_EXECUTESQL @SQLCount,N
'@COUNT INT OUT', @TotalCount
OUT
-
-----------------------------
-
-
--注意,表名@TableName可取:
-
--1.表名
-
--2.视图
-
--3. (SELECT * FROM TABLE1)A
-
END
二、曾经常用
1.语法示例
-
DECLARE @PageSize
INT =
10
--分页显示数据行数
-
DECLARE @PageIndex
INT =
1
--页码
-
DECLARE @StartIndex
INT,@EndIndex
INT
-
SET @StartIndex=((@PageIndex
-1)*@PageSize)+
1
--起始行
-
SET @EndIndex=@PageSize*@PageIndex
--结束行
-
SELECT *
--查询列
-
FROM (
-
SELECT ROW_NUMBER()
OVER(
ORDER
BY
ID)
RowID
--排序
-
,*
-
FROM AddressBook_GroupPerson
--查询表
-
WHERE
1=
1
--查询条件
-
)A
-
WHERE
RowID
BETWEEN @StartIndex
AND @EndIndex
2.分页存储过程
-
CREATE
PROCEDURE [dbo].[UP_SplicPage2]
-
@TableName
VARCHAR(
MAX) =
'',
--表名
-
@GetFields
VARCHAR(
MAX) =
'*',
--需要返回的列
-
@OrderBy
VARCHAR(
500),
--排序的字段名
-
@KeyID
VARCHAR(
50),
--主键字段或其他建立索引字段
-
@PageSize
INT =
10,
--页面尺寸
-
@PageIndex
INT =
1,
--页码
-
@StrWhere
VARCHAR(
MAX) =
'',
--查询条件(不需加where)
-
@TotalCount
INT
OUTPUT
--返回总行数
-
AS
-
BEGIN
-
SET NOCOUNT
ON;
-
DECLARE @
SQL
NVARCHAR(
MAX),@SQLCount
NVARCHAR(
MAX),@TempTableName
VARCHAR(
MAX),@StartIndex
INT,@EndIndex
INT
-
--排序
-
IF @OrderBy=
''
SET @OrderBy=
' ORDER BY ['+@KeyID+
'] DESC '
-
ELSE
SET @OrderBy =
' ORDER BY ' + @OrderBy
-
--查询条件
-
IF @StrWhere=
''
SET @StrWhere=
' 1=1 '
-
--生产行号表
-
SET @TempTableName =
'( SELECT ROW_NUMBER() OVER (' + @OrderBy +
' )AS RowID,* FROM '+@TableName+
' WHERE '+@StrWhere+
' ) as TempTable'
-
--获取分页起始和终止行号
-
SET @StartIndex = ((@PageIndex -
1) * @PageSize) +
1
--起
-
SET @EndIndex = @PageIndex * @PageSize
--终
-
-
------获取分页数据-----------
-
SET @
SQL=
'SELECT '+@GetFields+
' FROM '+@TempTableName+
' WHERE RowID BETWEEN '+
CONVERT(
VARCHAR(
50),@StartIndex)+
' AND '+
CONVERT(
VARCHAR(
50),@EndIndex)
-
--PRINT @SQL
-
EXEC(@
SQL)
-
-----------------------------
-
-
------获取表中有好多行-------
-
SET @SQLCount=
'SELECT @COUNT=COUNT(1) FROM '+@TableName+
' WHERE '+@StrWhere
-
--PRINT @SQLCount
-
EXEC SP_EXECUTESQL @SQLCount,N
'@COUNT INT OUT', @TotalCount
OUT
-
-----------------------------
-
-
--注意,表名@TableName可取:
-
--1.表名
-
--2.视图
-
--3. (SELECT * FROM TABLE1)A
-
END