Fruit Ninja(水果忍者)游戏源代码下载、分析(中)---可运行Android,Ios,Window,Mac,Html5平台

以前写分页读取数据时,

1、计算出Max(ID),Min(ID),取值:Max(ID)>ID>Min(ID),构造语句复杂,且容易出现1条数据量的误差;

2、排序我也不敢轻易尝试,担心会将动态sql搞的太复杂。


这次整理以前的存储过程,发现有一个编写存储过程的模版相当给力,思路清新:

1、使用ROW_NUMBER() OVER ( order by [字段1], [字段2],...)  AS RowID

2、使用 Top  @PageSize ;  RowID > @PageSize * (@p_PageIndex -1), 简单精确获取制定数据数据


For Example :

以最简单的Student表为例作为案例:

一、准备工作:建立临时表和填充数据

if exists (select 1 from sys.objects where name =‘Student‘ and type =‘U‘)
	drop  Table Student
	
Create Table Student
(    
	[ID] int IDENTITY(1,1) NOT NULL
	,[FullName] nvarchar(30)
	,[FirstName] nvarchar(30)
	,[LastName] nvarchar(30)
)

insert into Student 
select ‘张一‘ ,‘张‘,‘一‘
union select ‘张二‘ ,‘张‘,‘二‘
union select ‘张三‘ ,‘张‘,‘三‘
union select ‘张四‘ ,‘张‘,‘四‘
union select ‘王一‘ ,‘王‘,‘一‘
union select ‘王二‘ ,‘王‘,‘二‘
union select ‘王三‘ ,‘王‘,‘三‘
union select ‘王四‘ ,‘王‘,‘四‘
union select ‘胡一‘ ,‘胡‘,‘一‘
union select ‘胡二‘ ,‘胡‘,‘二‘
union select ‘胡三‘ ,‘胡‘,‘三‘
union select ‘胡四‘ ,‘胡‘,‘四‘
union select ‘李一‘ ,‘李‘,‘一‘
union select ‘李二‘ ,‘李‘,‘二‘
union select ‘李三‘ ,‘李‘,‘三‘
union select ‘李四‘ ,‘李‘,‘四‘



二、构造查询全部的SQL语句

--外传穿参数
declare @PageSize int  = 1
declare @PageIndex int = 3
declare @OrderStr nvarchar(100) = ‘ order by [FullName],[FirstName]‘ --也可根据传进来的参数构造
declare @WhereStr nvarchar(100) = ‘ Where [FirstName] = ‘‘李‘‘‘		 --也可根据传进来的参数构造
declare @TotalCount int --OUTPUT
--内部临时参数变量
declare @ClumnsStr nvarchar(100)
declare @SQLStr nvarchar(4000)
declare @CountStr nvarchar(4000)

SET @ClumnsStr=‘
,[FullName]
,[FirstName]
,[LastName]‘
set @SQLStr=‘select  ROW_NUMBER() OVER (‘ + @OrderStr +
		‘) AS RowID‘+@ClumnsStr+‘
 from   Student 
‘+@WhereStr
print ‘构造查询全部的SQL语句:‘ print @SQLStr

三、组合构造分页查询

SET @CountStr = ‘select  @TotalCount=COUNT(*) from (‘ + @SQLStr + ‘) as g‘ --获得总行数
print ‘ 获得总行数SQL语句:‘  PRINT   @CountStr                                                                    
EXEC SP_EXECUTESQL @CountStr,
	 N‘ @TotalCount INT OUTPUT‘,
	 @TotalCount OUTPUT	     
print ‘总行数:‘ print @TotalCount
	SET @SQLStr = ‘select top ‘ + STR(@PageSize) + ‘ * from(‘ + @SQLStr +
	    ‘) as g where RowID >‘ + STR(@PageSize * (@PageIndex -1))
print ‘最终组合构造分页查询:‘ PRINT(@SQLStr)
EXEC(@SQLStr)

四、运行结果




Fruit Ninja(水果忍者)游戏源代码下载、分析(中)---可运行Android,Ios,Window,Mac,Html5平台,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。