create database Exam_Week3
GO
USE Exam_Week3
GO
create table Classs
(
ClaID int identity(1001,1),
ClassName varchar(100),
Counts int
)
go
insert into Classs values
('1706B',5),
('1706A',5),
('1705B',5),
('1705A',5),
('1704B',5)
go
create table Student
(
SID int identity(2001,1),
ClaID int, --班级id
Sname varchar(100), --学生姓名
Sage datetime,
Ssex bit
)
go
insert into Student values
(1001,'张三1',2013-10-02,1),
(1001,'张三2',2013-10-02,1),
(1001,'张三3',2013-10-02,1),
(1001,'张三4',2013-10-02,1),
(1001,'张三5',2013-10-02,1),
(1002,'李四1',2013-10-02,1),
(1002,'李四2',2013-10-02,1),
(1002,'李四3',2013-10-02,1),
(1002,'李四4',2013-10-02,1),
(1002,'李四5',2013-10-02,1),
(1003,'李艳1',2013-10-02,0),
(1003,'李艳2',2013-10-02,0),
(1003,'李艳3',2013-10-02,0),
(1003,'李艳4',2013-10-02,0),
(1003,'李艳5',2013-10-02,0),
(1004,'王五1',2013-10-02,1),
(1004,'王五2',2013-10-02,1),
(1004,'王五3',2013-10-02,1),
(1004,'王五4',2013-10-02,1),
(1004,'王五5',2013-10-02,1),
(1005,'李流1',2013-10-02,1),
(1005,'李流2',2013-10-02,1),
(1005,'李流3',2013-10-02,1),
(1005,'李流4',2013-10-02,1),
(1005,'李流5',2013-10-02,1),
(1005,'李流6',2013-10-02,1)
go
create table Course
(
CID int identity(3001,1),
Cname varchar(100),
TID int --教室编号
)
go
insert into Course values
('C#',4001),
('php',4002),
('Ajax',4003),
('Webseave',4004),
('网站',4005)
go
create table Teacher
(
TID int identity(4001,1),
Tname varchar(100),
)
go
insert into Teacher values
('王红'),
('陆兵'),
('霍建华'),
('李冰冰'),
('宋小宝')
go
create table SC
(
scid int identity(5001,1),
SID int,
CID int, --课程编号
score int
)
go
insert into SC values
(2001,3001,93),
(2001,3002,85),
(2001,3003,57),
(2001,3004,98),
(2001,3005,99),
(2002,3001,80),
(2002,3002,100),
(2002,3003,55),
(2002,3004,77),
(2002,3005,43),
(2003,3001,85),
(2003,3002,86),
(2003,3003,88),
(2003,3004,90),
(2003,3005,91),
(2004,3001,79),
(2004,3002,80),
(2004,3003,64),
(2004,3004,63),
(2004,3005,62),
(2005,3001,74),
(2005,3002,73),
(2005,3003,96),
(2005,3004,89),
(2005,3005,92),
(2005,3001,92) select * from
(
select Classs.ClaID,Classs.ClassName,Classs.Counts,Student.Sage,Student.SID,Student.Sname,Student.Ssex,
SC.scid,SC.score,Course.CID,Course.Cname,Teacher.TID,Teacher.Tname,ROW_NUMBER() over(order by score) as rid
from Classs
join Student on Classs.ClaID=Student.ClaID
join SC on sc.SID=Student.SID
join Course on Course.CID=sc.CID
join Teacher on Teacher.TID=Course.TID ) as temp
where rid> -----分页存储过程
--判断存储过程是否存在
if OBJECT_ID('proc_Page') is not null
--删除存储过程
drop proc proc_Page
go
--创建存储过程
create proc proc_Page
--参数
@ClaId int=0, --班级Id
@Sage datetime=null, --出生日期
@Sname nvarchar(10)=null, --学生名称
@SmallScore int=0, --小成绩
@BigScore int=0, --大成绩
@CID int=0, --课程Id
@Tname nvarchar(10)=null, --讲师名字
@PageIndex int, --当前页
@PageSize int, --每页条数
@TotalCount int out, --总条数
@order int=1 --1升序 0降序
as
--变量
declare
@sql varchar(max), --总sql
@sqlWhere varchar(max), --条件
@rid int, --分页条件
@countSql nvarchar(max) --个数sql set @sql='';
set @sqlWhere=' where 1=1';
set @rid=(@PageIndex-1)*@PageSize;
set @countSql='select @total=count(1)
from Classs
join Student on Classs.ClaID=Student.ClaID
join SC on sc.SID=Student.SID
join Course on Course.CID=sc.CID
join Teacher on Teacher.TID=Course.TID'; --条件班级Id
if @ClaId!=0
begin
set @sqlWhere+=' and Classs.ClaId='+str(@ClaId);
end
----出生日期
if @Sage is not null
begin
set @sqlWhere+=' and Sage='+@Sage;
end
--学生名称
if @Sname is not null
begin
set @sqlWhere+=' and Sname like ''%'+@Sname+'%''';
end
--小成绩
if @SmallScore !=0
begin
set @sqlWhere+=' and Score>='+STR(@SmallScore);
end --大成绩
if @BigScore !=0
begin
set @sqlWhere+=' and Score<='+STR(@BigScore);
end --课程Id
if @CID!=0
begin
set @sqlWhere+=' and CID='+str(@CID);
end
--讲师名字
if @Tname is not null
begin
set @sqlWhere+=' and Tname like ''%'+@Tname+'%''';
end --总条数
set @countSql+=@sqlWhere; --执行计算条数的sql语句并且给输出参数赋值
exec sp_executesql @countSql, N'@total int out',@total=@TotalCount out --排序
declare @o varchar(4);
if @order=1
begin
set @o='asc';
end
if @order=0
begin
set @o='desc';
end
--总sql
set @sql='select top '+str(@PageSize)+' * from
(
select Classs.ClaID,Classs.ClassName,Classs.Counts,Student.Sage,Student.SID,Student.Sname,Student.Ssex,
SC.scid,SC.score,Course.CID,Course.Cname,Teacher.TID,Teacher.Tname,ROW_NUMBER() over(order by score '+@o+') as rid
from Classs
join Student on Classs.ClaID=Student.ClaID
join SC on sc.SID=Student.SID
join Course on Course.CID=sc.CID
join Teacher on Teacher.TID=Course.TID'; --条件
set @sql+=@sqlWhere; set @sql+=' ) as temp
where rid>'+STR(@rid); exec (@sql);

Sql service 分页存储过程的更多相关文章

  1. sql server 分页存储过程

    ----------------------分页存储过程------------------------------------------------------------------------ ...

  2. C#调用SQL Server分页存储过程

    以SQL Server2012提供的offset ..rows fetch next ..rows only为例 e.g. 表名:Tab1 ------------------------------ ...

  3. [转]Sql Server 分页存储过程

    本文转自: 版权声明:作者:jiankunking 出处:http://blog.csdn.net/jiankunking  本文版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且 ...

  4. SQL 2005 分页存储过程

    -- ============================================= -- Description:   <高效分页存储过程,适用于Sql2005以上> -- ...

  5. SQL实现分页存储过程

    SQL分页存储过程的编写: --获得分页的DATASET资源 ALTER PROC sp_GetSource( @PageSize INT, --每页显示条数 @PageIndex INT, --页码 ...

  6. 分页系列之一:SQL Server 分页存储过程

    以下为最基本的代码结构,SQL Server 2012 开始支持 CREATE PROCEDURE procXXX @Page int, --当前页码,从1开始 @PageSize int --每页记 ...

  7. SQL基础分页存储过程(案例一)

    --分页 存储过程 案例 -- 所执行的存储过程 create proc pageForUsers @currPage int, --当前页数 @pageSize int, --每页多少条记录 @co ...

  8. 改良版的SQL Service 通用存储过程分页

    上次写了通用存储过程.感觉还是有很大的BUG.就是条件不能参数画化.这个BUG可以说是致命的.但是我一直想在用什么方法能解决这个东西.其实我只是想写少量的代码来做更多的事情.我想能不能传集合给存储过程 ...

  9. sql server分页存储过程

    因项目需要,一次性查询出来的数据过大,内存hold不住,所以特意写成分页查询,减小占用内存. 存储过程如下: USE [XXX] GO SET ANSI_NULLS ON GO SET QUOTED_ ...

随机推荐

  1. 小程序onLaunch事件的坑

    记一个小程序踩过的坑 小程序项目中app.js里面定义了globalData,即全局变量,里面定义了一个token字段 需求是这样的,每次进入小程序的时候需要检验该token有没有,没有就请求后台获取 ...

  2. Linux C/C++基础 文件(下)

    1.fgets和fputs #include <stdio.h> int fputs(const char * str, FILE * stream); 功能:将str所指定的字符串写入到 ...

  3. Adobe Acrobat XI 中文版激活方法

    Adobe Acrobat XI不仅只是出色的PDF编辑.转换软件.此次更新深度整合了Microsoft Office套件,实现了PDF与Word.Excel以及PowerPoint等文档间的无缝相互 ...

  4. 【C/C++】assert()函数用法总结

    assert()函数用法总结 assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h> ...

  5. PHP Excel导入

    public function importFile() { $file = request()->file('file'); $params = $this->request->p ...

  6. Pandas时间序列和分组聚合

    #时间序列import pandas as pd import numpy as np # 生成一段时间范围 ''' 该函数主要用于生成一个固定频率的时间索引,在调用构造方法时,必须指定start.e ...

  7. mybatis批量更新update-设置多个字段值allowMultiQueries=true

    mybatis由于简单易用性得到大家的认可和使用 但是在批量更新操作中,网上介绍的貌似不全,正好今天做个记录,大家一起进步 在实际项目开发过程中,常有这样的需求:根据ids更新表的某一个字段值,这时的 ...

  8. 【转贴】SQL Server中关于跟踪(Trace)那点事

    SQL Server中关于跟踪(Trace)那点事 https://www.cnblogs.com/zhijianliutang/p/4113911.html 作者很牛B.. 前言 一提到跟踪俩字,很 ...

  9. asp.net之后台使用根目录运算符

    在asp.net前台,大家会经常使用根目录运算符~.这样,可以不用考虑网站的配置目录. 有时,需要在后台设置路径,同样需要使用根目录运算符.好吧,其实我每次需要使用这种方法,就需要在baidu上查找如 ...

  10. Codeforces 1221D. Make The Fence Great Again

    传送门 容易想到 $dp$,但是如果直接设 $f[i][j]$ 表示修正完前 $i$ 个位置,第 $i$ 个位置增加了 $j$ 高度显然是不行的 考虑有性质,发现每个位置只会被左右两个位置影响而改变, ...