1. 程式人生 > >三種SQL分頁查詢的儲存過程程式碼

三種SQL分頁查詢的儲存過程程式碼

--根據MAX(MIN)ID CREATE PROC [dbo].[proc_select_id] @pageindex int=1,--當前頁數 @pagesize int=10,--每頁大小 @tablename VARCHAR(50)='',--表名 @fields VARCHAR(1000)='',--查詢的欄位集合 @keyid VARCHAR(50)='',--主鍵 @condition NVARCHAR(1000)='',--查詢條件 @orderstr VARCHAR(500),--排序條件 @totalRecord BIGINT OUTPUT--總記錄數 AS IF ISNULL(@orderstr,N'')=N'' SET @orderstr=N' ORDER BY '
[email protected]
+N' DESC ' IF ISNULL(@fields,N'')=N'' SET @fields=N'*' IF ISNULL(@condition,N'')=N'' SET @condition=N'1=1' DECLARE @sql NVARCHAR(4000) --IF(@totalRecord IS NULL) --BEGIN SET @sql=N'SELECT @totalRecord=COUNT(*)' +N' FROM '[email protected] +N' WHERE '[email protected] EXEC sp_executesql @sql,N'@totalRecord INT OUTPUT',@totalRecord OUTPUT --END IF(@pageindex=1) BEGIN SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '
[email protected]
+N' FROM '[email protected]+N' WHERE '[email protected]+N' '[email protected] EXEC(@sql) END ELSE BEGIN DECLARE @operatestr CHAR(3),@comparestr CHAR(1) SET @operatestr='MAX' SET @comparestr='>' IF(@orderstr<>'') BEGIN IF(CHARINDEX('desc',LOWER(@orderstr))<>0) BEGIN SET @operatestr='MIN' SET @comparestr='<' END END SET @sql=N'SELECT top '+STR(@pagesize)+N' '
[email protected]
+N' FROM '[email protected]+N' WHERE '[email protected][email protected] +N'(SELECT '[email protected]+N'('[email protected]+N') FROM '[email protected]+N' WHERE '[email protected] +N' IN (SELECT TOP '+STR((@pageindex-1)*@pagesize)+N' '[email protected]+N' FROM '[email protected]lename+N' WHERE ' [email protected]+N' '[email protected]+N')) AND '[email protected]+N' '[email protected] EXEC(@sql) END GO --根據ROW_NUMBER() OVER CREATE PROC [dbo].[proc_select_page_row] @pageindex INT=1,--當前頁數 @pagesize INT=10,--每頁大小 @tablename VARCHAR(50)='',--表名 @fields VARCHAR(1000)='*',--查詢的欄位集合 @keyid VARCHAR(50)='',--主鍵 @condition NVARCHAR(1000)='',--查詢條件 @orderstr VARCHAR(500),--排序條件 @totalRecord BIGINT OUTPUT--總記錄數 AS IF ISNULL(@orderstr,N'')=N'' SET @orderstr=N' ORDER BY '[email protected]+N' DESC ' IF ISNULL(@fields,N'')=N'' SET @fields=N'*' IF ISNULL(@condition,N'')=N'' SET @condition=N'1=1' DECLARE @sql NVARCHAR(4000) -- IF @totalRecord IS NULL -- BEGIN SET @sql=N'SELECT @totalRecord=COUNT(*)' +N' FROM '[email protected] +N' WHERE '[email protected] EXEC sp_executesql @sql,N'@totalRecord bigint OUTPUT',@totalRecord OUTPUT --END IF(@pageindex=1) BEGIN SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '[email protected]+N' FROM '[email protected]+N' WHERE '[email protected]+N' '[email protected] EXEC(@sql) END ELSE BEGIN DECLARE @StartRecord INT SET @StartRecord = (@pageindex-1)*@pagesize + 1 SET @sql=N'SELECT * FROM (SELECT ROW_NUMBER() OVER ('+ @orderstr +N') AS rowId,'[email protected]+N' FROM '+ @tablename+N') AS T WHERE rowId>='+STR(@StartRecord)+N' and rowId<='+STR(@StartRecord + @pagesize - 1) EXEC(@sql) END GO --根據TOP ID CREATE PROC [dbo].[proc_select_page_top] @pageindex INT=1,--當前頁數 @pagesize INT=10,--每頁大小 @tablename VARCHAR(50)='',--表名 @fields VARCHAR(1000)='',--查詢的欄位集合 @keyid VARCHAR(50)='',--主鍵 @condition NVARCHAR(1000)='',--查詢條件 @orderstr VARCHAR(500),--排序條件 @totalRecord BIGINT OUTPUT--總記錄數 AS IF ISNULL(@orderstr,N'')=N'' SET @orderstr=N' ORDER BY '[email protected]+N' DESC ' IF ISNULL(@fields,N'')=N'' SET @fields=N'*' IF ISNULL(@condition,N'')=N'' SET @condition=N'1=1' DECLARE @sql NVARCHAR(4000) --IF(@totalRecord IS NULL) --BEGIN SET @sql=N'SELECT @totalRecord=COUNT(*)' +N' FROM '[email protected] +N' WHERE '[email protected] EXEC sp_executesql @sql,N'@totalRecord INT OUTPUT',@totalRecord OUTPUT --END IF(@pageindex=1) BEGIN SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '[email protected]+N' FROM '[email protected]+N' WHERE '[email protected]+N' '[email protected] EXEC(@sql) END ELSE BEGIN SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '[email protected]+N' FROM '[email protected]+N' WHERE '[email protected] +N' NOT IN(SELECT TOP '+STR((@pageindex-1)*@pagesize)+N' '[email protected]+N' FROM ' [email protected]+N' WHERE '[email protected]+N' '[email protected]+N') AND '[email protected]+N' '[email protected] EXEC(@sql) END GO