xml地图|网站地图|网站标签 [设为首页] [加入收藏]
Sql分页存储过程,混合使用的时候的注意事项
分类:数据库

Sql2012及以上版本的分页比较简单:

无意睹到一篇旧文档

代码:

CREATE PROCEDURE usp_pagingin2012
@Start     INT=0, 
@PageLimit INT=10
AS
BEGIN
SELECT * FROM 表名
ORDER  BY 列名
OFFSET @Start ROW 开始位置
FETCH NEXT @PageLimit ROWS ONLY 
END

SR0008:考虑使用 SCOPE_IDENTITY 代替 @@IDENTITY :

DECLARE @startDate DATETIME = '2015-09-01'
       ,@endDate DATETIME = '2016-03-01'

--写法一
SELECT CONVERT(NVARCHAR(7),DATEADD(MONTH,number,@startDate),120) 年月
FROM master..spt_values 
WHERE TYPE = 'p'
      AND CONVERT(nvarchar(10),dateadd(MONTH,number,@startDate),120)<=@endDate

--写法二
SELECT CONVERT(NVARCHAR(7),DATEADD(MONTH,number,@startDate),120) 年月
FROM master..spt_values 
WHERE TYPE = 'p'
      AND number<=DATEDIFF(MONTH,@startDate,@endDate)

/*

年月
-------
2015-09
2015-10
2015-11
2015-12
2016-01
2016-02
2016-03

(7 行受影响)

*/

Sql2005-2008分页稍微复杂一点:

日常开发,我们如果在插入记录的同时需要返回插入的IdentityID,通常我们会使用

spt_values说明:

CREATE PROCEDURE usp_paging
@PageNumber INT=1, 
@PageSize   INT=10
AS 
BEGIN
WITH ctepaging 
     AS (SELECT *,
                Row_number() OVER(ORDER BY 列名) AS rownum 
         FROM 表名) 
SELECT * 
FROM   ctepaging 
WHERE  rownum BETWEEN ( @PageNumber - 1 ) * @PageSize + 1 AND
@PageNumber * @PageSize
END

@@Identity 和使用函数 Scope_identity()

  1. master..spt_values是内部字典表,供SQL Server内部使用,许多系统存储过程和函数的源代码中都使用到了它;
  2. 列名分别为名称、值、类型、下限、上限、状态;
  3. 类型列的取值含义:D=Database Option P=Projection DBR=Database Role DC=Database Replication I=Index L=Locks V=Device Type
    因为比较多,无法一一列举。其中类型P较为特殊,它只是0-2047(与版本有关)之间的数字的简单列表,作为对所有类型之间关系的预测。
  4. msdn查不到master..spt_values的说明,不需要太深入了解此表。

本文由澳门新葡亰手机版发布于数据库,转载请注明出处:Sql分页存储过程,混合使用的时候的注意事项

上一篇:sql语句语法大全,sql编写将时间转换年月日 下一篇:没有了
猜你喜欢
热门排行
精彩图文