亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

一個通用的分頁存儲過程實現-SqlServer(附上sql源碼,一鍵執行即刻搭建運行環境)

2024-07-21 02:50:31
字體:
來源:轉載
供稿:網友
一個通用的分頁存儲過程實現-SqlServer(附上sql源碼,一鍵執行即刻搭建運行環境)

使用前提

  查詢表必須有ID字段,且該字段不能重復,建議為自增主鍵

背景

  如果使用ADO.NET進行開發,在查詢分頁數據的時候一般都是使用分頁存儲過程來實現的,本文提供一種通用的分頁存儲過程,只需要傳入:

  1. 表名(以DBName.dbo.TableName)的形式
  2. Where條件(ID > 0 AND ID < 100)
  3. Select字段(ID,NAME,CreateDate)
  4. Order字段(NAME ASC,CreateDate DESC)
  5. PageSize (15)
  6. PageIndex(2)
  7. TotalCount,此為output參數

  這7個參數,存儲過程就能夠返回指定條件下的分頁數據,和數據總數。

sql源碼&測試環境搭建

--創建Util庫CREATE DATABASE UtilGO--創建通用的分頁存儲過程USE UtilGO/****** Object:  StoredPRocedure [dbo].[UP_GeneralPagedQuery_v1]    Script Date: 04/03/2014 17:32:07 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- Author:        DeanZhou-- Create date: 2013-09-24-- Description:    通用的分頁存儲過程(一)CREATE PROCEDURE [dbo].[UP_GeneralPagedQuery_v1]    @TableName VARCHAR(100) ,                    --表名稱:如 MKT.dbo.UV_CouponInfo    @WhereField NVARCHAR(1000) = '' ,            --篩選條件:如 Status = 1 AND CreateUser = 'admin'    @SelectField NVARCHAR(1500) = '*' ,          --需要查詢的列:如 *    @OrderField NVARCHAR(1000) = '' ,            --需要進行排序的字段:如  CustomerName desc,StartDate asc,Status desc,id asc     @PageSize INT = 15 ,                         --頁面大?。喝?15    @PageIndex INT = 1 ,                         --當前頁面:如 1    @TotalCount INT = 0 OUT                      --記錄總數:輸出值AS     BEGIN           IF @OrderField IS NULL OR @OrderField = ''             BEGIN                SET @OrderField = ' ID '            END        IF @WhereField IS NULL OR @WhereField = ''             BEGIN                SET @WhereField = ' WHERE ID > 0 '            END        ELSE             BEGIN                SET @WhereField = ' WHERE ' + @WhereField            END                    DECLARE @ExceptCount INT = @PageSize * ( @PageIndex - 1 )        DECLARE @TakeCount INT = @PageSize            DECLARE @IsNeedSubQuery INT                DECLARE @SqlPreview NVARCHAR(MAX) =               'SELECT @C = COUNT(1) FROM ' + @TableName + ' ' + @WhereField + ';'            + 'IF @EC < 0 SET @EC = 0 IF @EC >= @C SET @EC = @C;'            + 'IF @TC < 0 SET @TC = 15 IF (@EC + @TC) > @C SET @TC = @C - @EC;'            + 'IF @EC > 0 AND @TC > 0 SET @NSQ = 1 ELSE SET @NSQ = 0;'                                                     EXEC sp_executesql @SqlPreview,            N'@C INT OUTPUT,@EC INT OUTPUT,@TC INT OUTPUT,@NSQ INT OUTPUT',            @TotalCount OUTPUT, @ExceptCount OUTPUT, @TakeCount OUTPUT, @IsNeedSubQuery OUTPUT                        DECLARE @MaxOrMin VARCHAR(3) = 'MAX'        DECLARE @DescOrAsc VARCHAR(4) = ''        IF @ExceptCount > @TotalCount / 2             BEGIN                SET @MaxOrMin = 'MIN'                SET @DescOrAsc = 'DESC'                SET @ExceptCount = @TotalCount - @ExceptCount + 1            END        DECLARE @SqlQuery NVARCHAR(MAX) =               ' DECLARE @T_IDS TABLE (ID INT) '                + ' IF @NSQ = 1' +                     ' BEGIN ' +                     '    SELECT @MD = ' + @MaxOrMin + '(ID) FROM '+                    '        (SELECT TOP ' + CONVERT(VARCHAR(15), @ExceptCount) + ' ID FROM ' + @TableName + ' ' + @WhereField + ' ORDER BY ' + @OrderField + ')T1;' +                     '    INSERT INTO @T_IDS '+                    '         SELECT TOP ' + CONVERT(VARCHAR(15), @TakeCount) + ' ID FROM ' + @TableName + ' ' + @WhereField + ' AND ID > @MD  ORDER BY ' + @OrderField +                     '    SELECT ' + @SelectField + ' FROM ' + @TableName + ' S WHERE ID IN (SELECT ID FROM @T_IDS) ORDER BY ' + @OrderField +                     ' END ' +                   ' ELSE' +                     ' BEGIN ' +                     '    INSERT INTO @T_IDS SELECT ID FROM (SELECT TOP ' + CONVERT(VARCHAR(15), @TakeCount) + ' ID FROM ' + @TableName + ' ' + @WhereField + ' ORDER BY  ' + @OrderField + ')T;' +                     '    SELECT ' + @SelectField + ' FROM ' + @TableName + ' S WHERE ID IN (SELECT ID FROM @T_IDS) ORDER BY ' + @OrderField +                     ' END '                                                  EXEC sp_executesql @SqlQuery, N'@MD INT,@NSQ INT', 0, @IsNeedSubQuery            END           GO    --創建測試庫CREATE DATABASE TestGO--創建測試表USE [Test]CREATE TABLE TableTest (ID INT,NAME NVARCHAR(50),CreateDate DATETIME)GO--插入測試數據INSERT INTO TableTestSELECT 1,'dean1',GETDATE() UNIONSELECT 2,'dean2',GETDATE() UNIONSELECT 3,'dean3',GETDATE() UNIONSELECT 4,'dean4',GETDATE() 

  打開您的sqlserver,在本地新建查詢,并運行上面的代碼,會在你的數據庫中創建以下內容:

  1. 一個名稱為【Util】的數據庫,該庫下面有一個名為【UP_GeneralPagedQuery_v1】的存儲過程,這個存儲過程就是通用的分頁存儲過程。
  2. 一個名稱為【Test】的數據庫,該庫下面有一個名為【TableTest】的表,這個表里面有4條數據

請注意:在執行sql之前確認一下沒有重名數據庫,以免出錯

測試

  新建一個查詢,執行下面sql,就完成了分頁數據的獲取

DECLARE    @TotalCount intEXEC Util.[dbo].[UP_GeneralPagedQuery_v1]        @TableName = N'Test.dbo.TableTest',        @WhereField = N'ID > 0 AND ID < 100',        @SelectField = N'ID,NAME,CreateDate',        @OrderField = N'NAME ASC,CreateDate DESC',        @PageSize = 2,        @PageIndex = 2,        @TotalCount = @TotalCount OUTPUTSELECT    @TotalCount as N'@TotalCount'


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕日本欧美| 亚洲欧美日本伦理| 性视频1819p久久| 97视频在线观看免费| 国内免费久久久久久久久久久| 欧美精品video| 中文字幕日韩精品在线观看| 57pao精品| 国产精品91久久久久久| 草民午夜欧美限制a级福利片| 高清日韩电视剧大全免费播放在线观看| 日韩欧美在线免费观看| 久久天天躁狠狠躁夜夜躁2014| 91在线观看欧美日韩| 国产精品爽黄69| 国产精品女主播| 久久久久久久av| 久久综合电影一区| 日本精品久久中文字幕佐佐木| 中文字幕久久久| 亚洲一区二区三区香蕉| 国产免费一区二区三区在线观看| 日韩欧美一区视频| 69**夜色精品国产69乱| 91av视频在线| 中文字幕亚洲一区| 91精品国产91| 国产亚洲精品美女久久久久| 最新国产精品拍自在线播放| 精品美女久久久久久免费| 国产成人久久久| 日韩精品免费在线视频| 亚洲高清福利视频| 国产精品久久久久久久久影视| 91精品国产综合久久香蕉的用户体验| 日本精品免费一区二区三区| 精品亚洲夜色av98在线观看| 在线观看精品自拍私拍| 亚洲网站视频福利| 亲爱的老师9免费观看全集电视剧| 欧美日韩在线另类| 欧美成aaa人片免费看| 亚洲三级 欧美三级| 国产女同一区二区| 国产精品a久久久久久| 亚洲成av人片在线观看香蕉| 国产欧美亚洲视频| 日韩av在线免费| 日本亚洲欧美三级| 性欧美激情精品| 色综合色综合网色综合| 国产69精品久久久久9999| 精品久久久久久中文字幕大豆网| 国产精品扒开腿做爽爽爽男男| 成人欧美在线视频| 亚洲欧洲在线看| 大荫蒂欧美视频另类xxxx| 精品动漫一区二区三区| 91精品国产色综合久久不卡98口| 日韩国产欧美精品一区二区三区| 国产精品欧美亚洲777777| 精品人伦一区二区三区蜜桃网站| 亚洲美女www午夜| 欧美人与性动交a欧美精品| 欧美激情免费观看| 在线精品视频视频中文字幕| 91社区国产高清| 91精品视频免费观看| 欧美理论在线观看| 久久久久久这里只有精品| 欧美精品午夜视频| 欧美激情一级精品国产| 96精品久久久久中文字幕| 日韩成人在线观看| 国内精品模特av私拍在线观看| 日韩电影中文 亚洲精品乱码| 俺也去精品视频在线观看| 日韩中文在线视频| 欧美日韩国产中字| 91精品在线播放| 国产精品极品美女粉嫩高清在线| 国产精品第七影院| 奇米一区二区三区四区久久| 国产97免费视| 日本高清+成人网在线观看| 国产成人精品电影久久久| 日韩中文字幕久久| 91国自产精品中文字幕亚洲| 欧美日韩在线观看视频小说| 欧美一区深夜视频| 成人久久18免费网站图片| 亚洲男女自偷自拍图片另类| 日韩在线观看免费av| 国产亚洲一级高清| 国模吧一区二区三区| 欧美肥老太性生活视频| 91亚洲午夜在线| 夜夜嗨av色综合久久久综合网| 亚洲韩国欧洲国产日产av| 日韩女优在线播放| 亚洲精品999| 欧美在线影院在线视频| 日韩最新中文字幕电影免费看| www国产亚洲精品久久网站| 亚洲男人第一网站| 亚洲人成亚洲人成在线观看| 一区二区三区 在线观看视| 亚洲亚裔videos黑人hd| 亚洲国产成人爱av在线播放| 日韩hd视频在线观看| 亚洲一区999| 亚洲欧美在线免费| 在线视频欧美日韩| 国产精品久久国产精品99gif| 国产视频丨精品|在线观看| 日韩一区在线视频| 亚洲国产精久久久久久| 亚洲欧美日韩精品久久奇米色影视| 欧美在线视频在线播放完整版免费观看| 久久91亚洲精品中文字幕奶水| 欧美电影免费观看网站| 亚洲女人天堂成人av在线| 久久久久国产精品免费网站| 亚洲精品97久久| 欧美精品在线免费| 久久久久久久久国产| 国产午夜精品一区理论片飘花| 国产精品久久久久久久9999| 最近2019中文字幕mv免费看| 国产精品第一页在线| 久久夜色撩人精品| 国产精品国产自产拍高清av水多| 国产日韩换脸av一区在线观看| 精品一区二区三区四区| xvideos国产精品| 亚洲福利在线播放| 亲爱的老师9免费观看全集电视剧| 久久成人精品一区二区三区| 91国自产精品中文字幕亚洲| 国产欧美日韩精品丝袜高跟鞋| 在线观看国产精品日韩av| 欧美大尺度激情区在线播放| 日韩欧美国产黄色| 欧美亚洲视频在线看网址| 2019中文字幕在线观看| 国产精品久久久久久久久久小说| 国产精品无码专区在线观看| 国产亚洲精品综合一区91| 国产精选久久久久久| 最近2019中文字幕mv免费看| 久久精品99久久久香蕉| 欧美黑人巨大xxx极品| 欧美成人免费在线观看| 日韩成人在线网站| 亚洲一区二区三区乱码aⅴ蜜桃女| 一区二区三区四区在线观看视频| 国产精品久久久久aaaa九色| 成人黄色大片在线免费观看| 91在线高清视频| 欧美视频免费在线观看| 亚洲国产精品女人久久久| 国产精品美女免费| 欧美精品国产精品日韩精品| 亚洲福利视频二区|