--更新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
Sql Server 分页拓展
猜你喜欢
转载自blog.csdn.net/qq_45244974/article/details/103661294
今日推荐
周排行