复制代码 代码如下: --根据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 "+@keyid+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 "+@tablename +N" WHERE "+@condition EXEC sp_executesql @sql,N"@totalRecord INT OUTPUT",@totalRecord OUTPUT --END IF(@pageindex=1) BEGIN SET @sql=N"SELECT TOP "+STR(@pagesize)+N" "+@fields+N" FROM "+@tablename+N" WHERE "+@condition+N" "+@orderstr 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" "+@fields+N" FROM "+@tablename+N" WHERE "+@keyid+@comparestr +N"(SELECT "+@operatestr+N"("+@keyid+N") FROM "+@tablename+N" WHERE "+@keyid +N" IN (SELECT TOP "+STR((@pageindex-1)*@pagesize)+N" "+@keyid+N" FROM "+@tablename+N" WHERE " +@condition+N" "+@orderstr+N")) AND "+@condition+N" "+@orderstr 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 "+@keyid+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 "+@tablename +N" WHERE "+@condition EXEC sp_executesql @sql,N"@totalRecord bigint OUTPUT",@totalRecord OUTPUT --END IF(@pageindex=1) BEGIN SET @sql=N"SELECT TOP "+STR(@pagesize)+N" "+@fields+N" FROM "+@tablename+N" WHERE "+@condition+N" "+@orderstr 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,"+@fields+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 "+@keyid+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 "+@tablename +N" WHERE "+@condition EXEC sp_executesql @sql,N"@totalRecord INT OUTPUT",@totalRecord OUTPUT --END IF(@pageindex=1) BEGIN SET @sql=N"SELECT TOP "+STR(@pagesize)+N" "+@fields+N" FROM "+@tablename+N" WHERE "+@condition+N" "+@orderstr EXEC(@sql) END ELSE BEGIN SET @sql=N"SELECT TOP "+STR(@pagesize)+N" "+@fields+N" FROM "+@tablename+N" WHERE "+@keyid +N" NOT IN(SELECT TOP "+STR((@pageindex-1)*@pagesize)+N" "+@keyid+N" FROM " +@tablename+N" WHERE "+@condition+N" "+@orderstr+N") AND "+@condition+N" "+@orderstr EXEC(@sql) END GO