mg4377娱乐娱城官网_mg4377娱乐手机版_www.mg4377.com

当前位置: mg4377娱乐娱城官网 > mg > 正文

【mg】仓库储存进度,通用的Sql存储进程

时间:2019-09-29 09:33来源:mg
mg,一、存储进度概述 SQL Server中的存款和储蓄进程是使用T_SQL编写的代码段。它的意在可以有帮忙的从系统表中查询音信,恐怕完结与更新数据库表相关的军管任务和别的的系统管理职

mg,一、存储进度概述

  SQL Server中的存款和储蓄进程是使用T_SQL编写的代码段。它的意在可以有帮忙的从系统表中查询音信,恐怕完结与更新数据库表相关的军管任务和别的的系统管理职责.T_【mg】仓库储存进度,通用的Sql存储进程。SQL语句是SQL Server数据库与应用程序之间的编制程序接口。在非常多气象下,一些代码会被开辟者重新编写多次,借使每一回都编写制定同样功能的代码,不但繁琐,而且便于出错,并且由于SQL Server逐一的执行语句会收缩系统的运作功效。

  简单来说,存款和储蓄进度正是SQL Server为了落成特定职责,而将一部分亟待频仍调用的定位操作语句,可能某个事情过于繁琐,要求编写制定大量逻辑和查询,严重影响程序质量,编写成程序段,这几个程序段存款和储蓄在服务器上,有数据库服务器通进度序来调用。

 

Sql二〇一二及以上版本的分页相比简单:

Sql二〇一三及以上版本的分页相比轻易:

CREATE PROCEDURE [dbo].[P_ProcPager] (
    @recordTotal INT OUTPUT,            --输出记录总数
    @viewName VARCHAR(800),        --表名
    @fieldName VARCHAR(800) = '*',        --查询字段
    @keyName VARCHAR(200) = 'Id',            --索引字段
    @pageSize INT = 20,                    --每页记录数
    @pageNo INT =1,                    --当前页
    @orderString VARCHAR(200),        --排序条件
    @whereString VARCHAR(800) = '1=1'        --WHERE条件
)
AS
BEGIN
     DECLARE @beginRow INT
     DECLARE @endRow INT
     DECLARE @tempLimit VARCHAR(200)
     DECLARE @tempCount NVARCHAR(1000)
     DECLARE @tempMain VARCHAR(1000)
     --declare @timediff datetime 

     set nocount on
     --select @timediff=getdate() --记录时间

     SET @beginRow = (@pageNo - 1) * @pageSize      1
     SET @endRow = @pageNo * @pageSize
     SET @tempLimit = 'rows BETWEEN '   CAST(@beginRow AS VARCHAR)  ' AND ' CAST(@endRow AS VARCHAR)

     --输出参数为总记录数
     SET @tempCount = 'SELECT @recordTotal = COUNT(*) FROM (SELECT ' @keyName ' FROM ' @viewName ' WHERE ' @whereString ') AS my_temp'
     EXECUTE sp_executesql @tempCount,N'@recordTotal INT OUTPUT',@recordTotal OUTPUT

     --主查询返回结果集
     SET @tempMain = 'SELECT * FROM (SELECT ROW_NUMBER() OVER (order by ' @orderString ') AS rows ,' @fieldName ' FROM ' @viewName ' WHERE ' @whereString ') AS main_temp WHERE ' @tempLimit

     --PRINT @tempMain
     EXECUTE (@tempMain)
     --select datediff(ms,@timediff,getdate()) as 耗时 

     set nocount off
END

GO

二、存款和储蓄进程的独到之处

  1. 仓库储存进度加速系统运转速度,存款和储蓄进程只在创立刻编写翻译,今后每一遍推行时无需重新编写翻译。
  2. 积累进度能够打包复杂的数据库操作,简化操作流程,譬如对四个表的翻新,删除等。
  3. 可实现模块化的次第设计,存款和储蓄进程能够一再调用,提供统一的数据库访谈接口,创新应用程序的可维护性。
  4. 仓库储存进程能够追加代码的安全性,对于顾客无法一向操作存款和储蓄进度中援引的靶子,SQL  Server能够设定客商对点名存款和储蓄进度的举办权限。
  5. 储存进程能够减少互连网流量,存款和储蓄进度代码直接存款和储蓄于数据库中,在客商端与服务器的通讯进度中,不会时有发生大批量的T_SQL代码流量。
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
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

调用示例

编辑:mg 本文来源:【mg】仓库储存进度,通用的Sql存储进程

关键词: Other 分页存储过程 经典实用 日常总结