国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

SQLServer分頁查詢通用存儲過程

2024-07-21 02:32:04
字體:
來源:轉載
供稿:網友

自開始做項目以來,一直在用。這段存儲過程的的原創者(SORRY,忘記名字了),寫得這段SQL代碼很不錯,我在這個基礎上,按照我的習慣以及思維方式,調整了代碼,只做分頁查詢用。

/**//*----------------------------------------------
 *PRocedure name : prcPageResult
 *  author : FuChun
 *  create date : 2006-10-04
 */
CREATE PROCEDURE prcPageResult
-- 獲得某一頁的數據 --
@currPage int = 1,                                    --當前頁頁碼 (即Top currPage)
@showColumn varchar(2000) = '*',           --需要得到的字段 (即 column1,column2,......)
@tabName varchar(2000),                           --需要查看的表名 (即 from table_name)
@strCondition varchar(2000) = '',              --查詢條件 (即 where condition......) 不用加where關鍵字
@ascColumn varchar(100) = '',                 --排序的字段名 (即 order by column asc/desc)
@bitOrderType bit = 0,                            --排序的類型 (0為升序,1為降序)
@pkColumn varchar(50) = '',                   --主鍵名稱
@pageSize int = 20                                --分頁大小

AS
BEGIN -- 存儲過程開始
-- 該存儲過程需要用到的幾個變量 http://www.survivalescaperooms.com/ --
DECLARE @strTemp varchar(1000)
DECLARE @strSql varchar(4000)                   --該存儲過程最后執行的語句
DECLARE @strOrderType varchar(1000)      --排序類型語句 (order by column asc或者order by column desc)

BEGIN
IF @bitOrderType = 1   -- bitOrderType=1即執行降序
BEGIN
    SET @strOrderType = ' ORDER BY '+@ascColumn+' DESC'
    SET @strTemp = '<(SELECT min'
END
ELSE
BEGIN
    SET @strOrderType = ' ORDER BY '+@ascColumn+' ASC'
    SET @strTemp = '>(SELECT max'
END

IF @currPage = 1    -- 如果是第一頁
BEGIN
    IF @strCondition != ''
        SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+
            ' WHERE '+@strCondition+@strOrderType
    ELSE
        SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+@strOrderType
END

ELSE    -- 其他頁
BEGIN
    IF @strCondition !=''
        SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+
        ' WHERE '+@strCondition+' AND '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+
        ' '+@pkColumn+' FROM '+@tabName+@strOrderType+') AS TabTemp)'+@strOrderType
    ELSE
        SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+
        ' WHERE '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+' '+@pkColumn+
        ' FROM '+@tabName+@strOrderType+') AS TabTemp)'+@strOrderType
END

END
EXEC (@strSql)
END  -- 存儲過程結束
------------------------------------------------
GO
 調用方法:

prcPageResult 1,'*','TableName','','CreateDate',1,'PkID',25

 上面表示,查詢表TableName的所有字段,前25條記錄,因為是第一頁,排序字段為CreateDate,降序排列,主鍵是PkID。這個存儲過程的功能比較強大,用在項目中非常的適用。不信您可以試試看,尤其是在百萬級數據上,他的優勢就顯露無疑了,當然,這段代碼是可以轉換成MySQL中的存儲過程的,不過,在這里就不給大家了,你們可以自己試著轉換看看。

下面的存儲過程查詢表的記錄數:

/**//*----------------------------------------------
 *procedure name : prcRowsCount
 *  author : FuChun
 *  create date : 2006-09-22
 */
CREATE PROC prcRowsCount
@tabName varchar(200),            --需要查詢的表名
@colName varchar(200)='*',        --需要查詢的列名
@condition varchar(200)=''       --查詢條件
AS
BEGIN
    DECLARE @strSql varchar(255)
    IF @condition = ''
        SET @strSql='select count('+@colName+') from '+@tabName
    ELSE
        SET @strSql='select count('+@colName+') from '+@tabName+' where '+@condition
    EXEC (@strSql)
END
------------------------------------------------
GO
還有刪除記錄的通用存儲過程和查詢單條記錄的通用存儲過程在這里就不奉送了,感謝提供原通用分頁查詢存儲過程的哥們,謝謝。
http://blog.csdn.net/fcrpg2005/archive/2007/02/22/1512707.aspx


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宿松县| 绥德县| 松阳县| 曲松县| 田东县| 新密市| 安新县| 区。| 隆安县| 安泽县| 肇州县| 偏关县| 南昌市| 横峰县| 武汉市| 大城县| 东至县| 临桂县| 泾川县| 邮箱| 自贡市| 泾川县| 思茅市| 鹿泉市| 东乌珠穆沁旗| 崇左市| 夏河县| 太谷县| 龙游县| 翁牛特旗| 泾阳县| 胶南市| 枣阳市| 扶绥县| 湘乡市| 慈溪市| 和平区| 宝丰县| 岳阳县| 阿坝县| 深泽县|