日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MS SQL 分页存储过程

發布時間:2023/12/1 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MS SQL 分页存储过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近換了家新公司,但是新公司沒有使用分頁的存儲過程。那我就自個寫一個往項目上套 (效率怎么樣就不怎么清楚沒有詳細的測試過)

CREATE PROCEDURE [dbo].[pro_common_pageList](@tab NVARCHAR(MAX) ,---表名@PrimaryKey VARCHAR(100) , --主鍵ID@strFld NVARCHAR(MAX) , --字段字符串@strWhere NVARCHAR(MAX) = ' ' , --where條件 @IsDistinct BIT ,@PageIndex INT , --頁碼@PageSize INT , --每頁容納的記錄數@Order VARCHAR(255) = ' ' , --排序字段及規則,不用加order by@Sort VARCHAR(20) = 'desc' ,@TotalCount INT OUTPUT --總記錄數 ) ASBEGINSET NOCOUNT ON;DECLARE @strSql VARCHAR(MAX);IF @strFld IS NULLOR @strFld = ' 'BEGIN SET @strFld = '*';END; IF @Order IS NULLOR @Order = ' 'BEGIN SET @Order = @PrimaryKey;END; --計算總記錄數DECLARE @sqlRecordCount NVARCHAR(MAX); --得到總記錄條數的語句DECLARE @recordCount INT; --保存總記錄條數的變量DECLARE @distinct NVARCHAR(20)= ' ';IF @IsDistinct = 1BEGIN SET @distinct = ' DISTINCT ';END; SET @sqlRecordCount = N'SELECT @recordCount=COUNT(1) FROM (SELECT '+ @distinct + ' ' + @strFld + ' FROM ' + @tab + ' WHERE 1=1 '+ @strWhere + ' ) AS TEMPTABLE';EXEC sp_executesql @sqlRecordCount, N'@recordCount int output',@recordCount OUTPUT;SET @TotalCount = @recordCount;--數據查詢 --當@PageIndex=1,使用TOP效率較快IF @PageIndex = 1BEGIN SET @strSql = 'SELECT ' + @distinct + ' TOP ' + STR(@PageSize)+ ' ' + @strFld + ',0 AS rownum FROM ' + @tab+ ' WHERE 1=1 ' + @strWhere + ' ORDER BY ' + @Order + ' '+ @Sort;END; ELSEBEGIN SET @strSql = 'SELECT * FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY ' + @PrimaryKey+ ') AS rownum FROM '; --是否去重:1去重IF @IsDistinct = 1BEGIN SET @strSql = @strSql + ' (SELECT DISTINCT ' + @strFld+ ' FROM ' + @tab + ' WHERE 1=1 ' + @strWhere+ ' ) AS S ';END;ELSEBEGIN SET @strSql = @strSql + ' ' + @tab + ' WHERE 1=1 '+ @strWhere;END; SET @strSql = @strSql+ ') AS Dwhere WHERE Dwhere.rownum BETWEEN '+ CAST(( ( @PageIndex - 1 ) * @PageSize ) + 1 AS NVARCHAR(20));SET @strSql = @strSql + ' AND '+ CAST(( @PageIndex * @PageSize ) AS NVARCHAR(20));SET @strSql = @strSql + ' ORDER BY ' + @Order + ' ' + @Sort;END; PRINT(@strSql)EXEC (@strSql);SET NOCOUNT OFF;END; View Code

?

轉載于:https://www.cnblogs.com/witeem/p/9067132.html

總結

以上是生活随笔為你收集整理的MS SQL 分页存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。