1、孙娟111033安庆职业技术学院电子信息系实验报告(SQL Server)姓名: 孙娟 学号:1110332013实验序号:第 9次实验名称:存储过程实验日期:2013.10.21实验成绩: 87一、实验目的及要求(本次上机实践所涉及并要求掌握的知识点。)1. 了解存储过程的概念2. 建立和执行存储过程3.存储过程的维护和管理4.存储过程中参数的使用二、实验环境(本次上机实践所使用的硬件和相关软件。)硬件:PC机:CPU双核1.6G;内存:不小于512MB; D盘剩余空间不小于10G;E盘剩余空间不小于10G;软件:Windows 2003 操作系统,Vmware Workstation 9安
2、装原程序和sql server 2005 dev iso文件。三、实验内容及实验步骤(上机实践内容:如程序设计、图形图像制作、网页设计、数据库操作、计算机组装与维护等)等;用实验步骤或算法表示法、流程图等形式表达算法设计思想与算法实现步骤)实验内容:一、 存储过程的创建在library 数据库中,创建一个返回图书类别信息的存储过程getbookcategory (用create procerduce命令和SSMS创建)二、 执行上述存储过程三、 查看上述存储过程四、 修改和删除上述存储过程五、 带参数的存储过程(1) 使用输入参数根据读者编号,查询读者的当前借书的记录(2) 使用输出参数根据读
3、者的编号,查询读者的到期的图书个数(3) 通过return返回值根据指定的图书编号,查找是否借出,并将其值返回六、 创建借书存储过程 borrowbook(p215)七、 创建还书存储过程returnbook(p216)四、操作过程及实验结果详细记录在操作过程中出现的问题及解决方法。记录实验的结果(或截图,以供教师审阅。)。一. 二. 三.四.(1)(2)五.(1)(2)(3).六.七.五、总结这次实训我学会了执存储过程,储过程的维护和管理,储过程中参数的使用。六、附录(命令)一. use librarygocreate procedure getbookcategoryasselect 类编
4、号,类名称from bookcategory二.use librarygoexecute getbookcategory三.use librarygosp_help getbookcategory四.(1)use librarygoalter proc getbookcategoryasselect 类编号,类名称from bookcategoryorder by 类编号go(2)use librarygodrop proc getbookcategorygo五.(1)create proc borrowinforeaderid intasselect borrow.图书编号,books.图书
5、名,borrow.借阅日期,borrow.应还日期from borrow inner joinbooks on borrow.读者编号= books.图书编号where borrow.读者编号=readerid(2).create proc getoverdatenumreaderid int,booknum int outputasselect booknum=count(*)from borrowwhere 读者编号=readeridand datediff(day,应还日期,getdate()0(3).create proc isborrowedbookid intasdeclare b
6、ookstate bitselect bookstate=是否借出from bookswhere 图书编号= bookidreturn bookstate-调用存储过程并获得返回值:declare isborrowed bitexec isborrowed=isborrowed1if isborrowed=0print未借出elseprint已借出六.CREATE PROC BorrowBookBookID int,ReaderID intASDECLARE BorrowNum int,BorrowDureNum int, BorrowDureDays int-根据读者编号,查出该读者当前借书
7、的数量SELECT BorrowNum=COUNT(*) FROM BorrowWHERE 读者编号=ReaderID-根据读者编号,得到该读者能借的图书数量和借书期限SELECT BorrowDureNum=借书数量,BorrowDureDays=借书期限FROM ReaderCategory,ReadersWHERE ReaderCategory.种类编号=Readers.种类编号AND Readers.读者编号=ReaderID-若书已借出,不能借IF (SELECT 是否借出FROM Books WHERE 图书编号=BookID)=1BEGINPRINT图书已借出,不能借RETURN
8、 1END-若超过借书数量,不能借IF BorrowNum=BorrowDureNumBEGINPRINT图书数量已满,不能再借RETURN 2END-若有过期图书,不能借IF EXISTS(SELECT * FROM Borrow WHERE DATEDIFF(day,应还日期,GETDATE()0AND 读者编号=ReaderID)BEGINPRINT有过期未还图书,不能借RETURN 3END-保存借书信息INSERT INTO BorrowVALUES(BookID,ReaderID,GETDATE(),DATEADD(day,borrowduredays,GETDATE()IF ER
9、ROR=0BEGINPRINT 图书借阅成功RETURN 0ENDELSEBEGINPRINT 图书借阅失败!RETURN 4END七.create proc returnbookbookid int,readerid int,returndate datetime,fine money=null,memo text=nullas-查找有无该借书记录,若不存在,返回declare borrowdate datetime,duedate datetimeif not exists(select*from borrow where 图书编号=bookid and 读者编号=readerid) be
10、ginprint无此借书记录return 1endselect borrowdate=借阅日期,duedate=应还日期from borrow where 图书编号=bookid and 读者编号=readerid-开始事务begin transaction-在数据表borrowhistory 中保存还书信息insert into borrowhistory(图书编号,读者编号,借出日期,应还日期,还书日期,支付罚金,备注)values(bookid,readerid,borrowdate,duedate,returndate,fine,memo)if error0 begin rollback tran print 还书失败 return 1 end-将该借书记录从借书表borrow 中删除delete from borrow where 图书编号=bookid and 读者编号=readeridif error0 begin rollback tran print 还书失败 return 1 endcommit tranprint借书成功return 0
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1