Sql Server 分页拓展

--更新sql分页写法


Create Database MySchoolDB1220
go
use MySchoolDB1220
go
--年级表
create table Grade
(
Id int primary key identity,
Name varchar(50)
)
--班级表
create table Category
(
Id int primary key identity,
Name varchar(50),
GId int foreign key references Grade(Id) -- 年级ID
)
--学生表
create table Student
(
Id int primary key identity,
Name varchar(50),
Sex varchar(50),
Tel varchar(50),
Photo varchar(50),
JoinTime varchar(50),--入学时间
OutTime varchar(50),--毕业时间
CId int foreign key references Category(Id)--班级ID
)
go
insert into Grade values ('S1'),('S2'),('S3')
insert into Category values ('S1101',1),('S1102',1),('S2201',2),('S2202',2),('S3301',3),('S3302',3)
---------------------------------------------------------------------------------------------------------
go
--存储过程 -带固定条件的分页查询
create proc GetStudent_1
(
@PageIndex int,
@PageSize int,
@Cid int,
@PageCount int output
)
as 
begin 
   declare @s int = (@PageIndex -1)*@PageSize+1
   declare @e int = @PageIndex * @PageSize


   select @PageCount = Count(*) from Student where CId=@Cid


   select * from 
   (
   select 
   ROW_NUMBER() over (Order by C.Id) as No, 
   S.* ,
   C.Name as CName
   from Student S left join Category C 
   on C.Id = S.CId
   where C.Id = @Cid
   ) T
   where T.No between @s and @e
end 
go
-----------------------------------------------------------------------------
--组合条件查询 无分页
create proc GetStudent_2
(
@Cid int ,
@Name varchar(50),
@StartTime varchar(50),
@EndTime varchar(50)
)
as 
begin
	declare @sql nvarchar(2000) = N'select S.*,C.Name as CName from Student S left join Category C on S.Cid=C.Id where 1=1 ';
	if(@Cid>0)
	begin 
		set @sql = @sql + N' and S.Cid = '+@Cid
	end 


	if(len(@Name)>0)
	begin
		set @sql = @sql + N' and S.Name like '+@Name 
	end 


	if(len(@StartTime)>0)
	begin
		set @sql = @sql + N' and JoinTime > '''+@StartTime+'''' 
	end 


	if(len(@EndTime)>0)
	begin
		set @sql = @sql + N' and JoinTime < '''+@EndTime+'''' 
	end 


	exec sp_executesql @sql
end    
--------------------------------------------------------------------------------
go
--------------------------------------------------------------------------------
create proc GetStudent_3
(
@PageIndex int,
@PageSize int,
@Cid int,
@Name varchar(50),
@StartTime varchar(50),
@EndTime varchar(50),
@PageCount int output
)
as 
begin 
   declare @s int = (@PageIndex -1)*@PageSize+1
   declare @e int = @PageIndex * @PageSize
   declare @SqlCount nvarchar(2000)
   declare @sqlPage nvarchar(2000)


   declare @sql nvarchar(2000) = N'select S.*,C.Name as CName from Student S left join Category C on S.Cid=C.Id where 1=1 ';
	if(@Cid>0)
	begin 
		set @sql = @sql + N' and S.Cid = '+@Cid
	end 


	if(len(@Name)>0)
	begin
		set @sql = @sql + N' and S.Name like '+@Name 
	end 


	if(len(@StartTime)>0)
	begin
		set @sql = @sql + N' and JoinTime > '''+@StartTime+'''' 
	end 


	if(len(@EndTime)>0)
	begin
		set @sql = @sql + N' and JoinTime < '''+@EndTime+'''' 
	end 


	set @sql = '('+@sql+') T'


	
	set @SqlCount= N'Select @PageCount = Count(*) from '+@sql
	exec sp_executesql @SqlCount,N'@PageCount int out',@PageCount out




	set @sqlPage = N'select * from  ( select ROW_NUMBER() over (Order by T.Id) as No, * from '+@sql+') TN where TN.No between '+convert(varchar(5),@s)+' and '+convert(varchar(5),@e)+')'							  
	exec sp_executesql @sqlPage		
end 					   


go
发布了43 篇原创文章 · 获赞 35 · 访问量 1559

猜你喜欢

转载自blog.csdn.net/qq_45244974/article/details/103661294