热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQL高级第七章存储过程

作业:*2.存储过程实现分页page为第几页row为每页多少行*IFEXISTS(SELECT*FROMsysobjectsWHERENAMEproc_page)

作业:



*2.存储过程实现分页 @page为第几页 @row为每页多少行
*/
IF EXISTS (SELECT * FROM sysobjects WHERE NAME='proc_page')DROP PROCEDURE proc_page
GOCREATE PROCEDURE proc_page@page int,@row int =10AsDECLARE @total AS int SELECT @total=count(*) FROM BorrowIF @total<=(@page-1)*@rowprint(&#39;总条数为&#39;+convert(varchar(5),@total)+&#39;请确认参数&#39;)ELSESELECT TOP (@row) * FROM Borrow WHERE rid NOT IN(SELECT TOP ((@page-1)*@row) rid FROM Borrow)
GO
--执行语句
exec proc_page 1




/*
*3.存储过程统计已&#39;北京&#39;冠名的出版社的图书信息
*/
IF EXISTS (SELECT * FROM sysobjects WHERE NAME=&#39;proc_book&#39;)DROP PROCEDURE proc_book
GO
CREATE PROCEDURE proc_book
@bname varchar(50)ASSELECT * FROM Book WHERE PubComp like @bname
GO--执行存储过程
exec proc_book &#39;北京%&#39;




/*
*4.存储过程统计某一时间段的借阅信息
*/
IF EXISTS (SELECT * FROM sysobjects WHERE NAME=&#39;proc_borrow&#39;)DROP PROCEDURE proc_borrow
GO
CREATE PROCEDURE proc_borrow@beginDate datetime, --注意参数不能直接用函数赋值@endDate datetime
ASIF @beginDate IS NULLSET @beginDate=DateAdd(MM,-1,getDate())IF @endDate IS NULLSET @endDate=getDate()SELECT * FROM Borrow WHERE LendDate BETWEEN @beginDate AND @endDate
GO



/*
*5.存储过程实现插入借阅记录,
输入参数:借书人ID、姓名、借书的名称,要求:
(1)图书信息表Book对应的图书数量减1;
(2)读者信息表Reader对应的读者已借书数量加1。如没有该借阅者的信息,则新加一条读者信息条记录;
(3)向图书借阅表Borrow中添加一条借阅记录,借阅日期、应归还日期、实际归还日期都采用默认值。
表结构参考第2章作业的简答题。
*/IF EXISTS (SELECT * FROM sysobjects WHERE NAME=&#39;proc_addreader&#39;)DROP PROCEDURE proc_addreader
GOCREATE PROCEDURE proc_addreader@RID varchar(50), --reader ID@Rname varchar(50), --reader name@Bname varchar(50) --borrow book name
ASBEGIN TRANSACTIONDECLARE @errorSum intSET @errorSum=0UPDATE Book SET BCount=BCount-1 WHERE(BName=@Bname)SET @errorSum=@errorSum+@@errorIF EXISTS(SELECT * FROM Reader WHERE RName=@Rname)UPDATE Reader SET LendNum=LendNum+1 WHERE RName=@RnameELSEINSERT INTO Reader VALUES(@RID,@RName,1) SET @errorSum=@errorSum+@@errorDECLARE @BID varchar(50)SELECT @BID=BID FROM Book WHERE BName=@BnameINSERT INTO Borrow(RID,BID) VALUES (@RID,@BID)SET @errorSum=@errorSum+@@errorIF (@errorSum<>0)BEGIN print(&#39;失败了&#39;)ROLLBACK TRANSACTION END ELSE BEGIN print(&#39;成功了&#39;)COMMIT TRANSACTION




上机练习:




------------------

USE MySchool
GO
EXEC sp_columns Student --查看表Student中列的信息
EXEC sp_help Student --查看表Student的所有信息
EXEC sp_helpconstraint Student --查看表Student的约束


END GO




--------------------

/*---创建存储过程----*/
CREATE PROCEDURE usp_grade_subject
AS SELECT GradeName,SubjectName,ClassHour FROM Grade INNER JOIN SubjectON Grade.GradeId=Subject.GradeIdORDER BY Subject.GradeId,SubjectNo
GO
/*---调用执行存储过程---*/
EXEC usp_grade_subject


--------------------------------


CREATE PROCEDURE usp_query_subject@GradeName VARCHAR(50) = NULL
AS IF @GradeName IS NULLSELECT GradeName,SubjectName,ClassHour FROM Grade LEFT JOIN Subject ON Grade.GradeId=Subject.GradeId UNION SELECT GradeName,&#39; &#39;,SUM(ClassHour)FROM GradeLEFT JOIN Subject ON Grade.GradeId=Subject.GradeId GROUP BY GradeNameELSESELECT GradeName,SubjectName,ClassHour FROM GradeLEFT JOIN Subject ON Grade.GradeId=Subject.GradeId

CREATE PROCEDURE usp_query_subject@CourseNum INT OUTPUT, @HourNum INT OUTPUT, @GradeName VARCHAR(50)
AS IF LEN(@GradeName) = 0BEGINPRINT &#39;学期名称不能为空&#39;RETURNENDPRINT &#39;---------学期课程信息如下------------&#39;SELECT GradeName,SubjectName,ClassHour FROM Grade LEFT JOIN Subject ON Grade.GradeId=Subject.GradeId WHERE GradeName=@GradeNameSELECT @CourseNum=COUNT(0), @HourNum=SUM(ClassHour)FROM GradeINNER JOIN Subject ON Grade.GradeId=Subject.GradeId WHERE GradeName=@GradeName
GO

WHERE GradeName=@GradeName UNION SELECT GradeName,&#39; &#39;,SUM(ClassHour)FROM Grade LEFT JOIN Subject ON Grade.GradeId=Subject.GradeId WHERE GradeName=@GradeName GROUP BY GradeNameGO

CREATE PROCEDURE usp_insert_subject@SubjectNo int OUTPUT,@GradeId int OUTPUT,@GradeName varchar(50),@SubjectName varchar(50),@ClassHour int = 36
AS DECLARE @errNum intSET @errNum = 0IF (LEN(RTRIM(@SubjectName))=0 OR LEN(RTRIM(@GradeName))=0)RETURN -1BEGIN TRANSACTIONIF NOT EXISTS(SELECT * FROM Grade WHERE GradeName = @GradeName)BEGININSERT INTO Grade (GradeName) VALUES (@GradeName)SET @errNum = @errNum + @@ERRORSELECT @GradeId=@@IDENTITYENDELSESELECT @GradeId=GradeId FROM Grade WHERE GradeName = @GradeNameINSERT INTO Subject (SubjectName,ClassHour,GradeId) VALUES (@SubjectName,@ClassHour,@GradeId)SET @errNum = @errNum + @@ERRORSELECT @SubjectNo=@@IDENTITYIF (@errNum > 0)BEGINROLLBACK TRANSACTIONRETURN 0 ENDELSEBEGINCOMMIT TRANSACTIONRETURN 1END
GO--调用存储过程
DECLARE @SubjectNo int
DECLARE @GradeId int
DECLARE @GradeName varchar(50)
DECLARE @SubjectName varchar(50)
DECLARE @ClassHour int
DECLARE @rt intSET @GradeName = &#39;Y2&#39;
SET @SubjectName = &#39;Linux&#39;
SET @ClassHour = 10
EXEC @rt=usp_insert_subject @SubjectNo OUTPUT,@GradeId OUTPUT,@GradeName,@SubjectName,@ClassHour
IF (@rt = 1)BEGINPRINT &#39;增加课程&#39;+@SubjectName+&#39;记录成功&#39;PRINT &#39;学期编号是&#39; + CAST(@GradeId AS varchar(10)) + &#39;,学期名称是&#39; + @GradeNamePRINT &#39;课程编号是&#39; + CAST(@SubjectNo AS varchar(10)) + &#39;,课程名称是&#39; + @SubjectNameEND
ELSE if (@rt = 0)PRINT &#39;增加课程记录失败!&#39;
ELSEPRINT &#39;学期名称或课程名称不能为空,请重新执行!&#39;
GO


EXEC usp_query_subject &#39;s2&#39;




-----------------------------------------------------------------------






推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
author-avatar
明霞学
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有