第七章 课后简答答案

/*
*2.存储过程实现分页 @page为第几页 @row为每页多少行
*/
IF EXISTS (SELECT * FROM sysobjects WHERE NAME='proc_page')
 DROP PROCEDURE proc_page
GO

CREATE PROCEDURE proc_page
	@page int,
	@row int =10
  As
    DECLARE @total AS int 
    SELECT @total=count(*) FROM Borrow
	IF @total<=(@page-1)*@row
		 print('总条数为'+convert(varchar(5),@total)+'请确认参数')
	ELSE
		SELECT TOP (@row)  * FROM Borrow  WHERE rid NOT IN(SELECT TOP ((@page-1)*@row) rid FROM Borrow)
GO
--执行语句
exec proc_page 1
 

/*
*3.存储过程统计已'北京'冠名的出版社的图书信息
*/
IF EXISTS (SELECT * FROM sysobjects WHERE NAME='proc_book')
	DROP PROCEDURE proc_book
GO
CREATE PROCEDURE proc_book
@bname varchar(50)
 AS
	SELECT * FROM Book WHERE PubComp like @bname
GO

--执行存储过程
exec proc_book '北京%'

/*
*4.存储过程统计某一时间段的借阅信息
*/
IF EXISTS (SELECT * FROM sysobjects WHERE NAME='proc_borrow')
	DROP PROCEDURE proc_borrow
GO
CREATE PROCEDURE proc_borrow
	@beginDate datetime,  --注意参数不能直接用函数赋值
	@endDate datetime
AS
  IF @beginDate IS NULL
       SET  @beginDate=DateAdd(MM,-1,getDate())
  IF @endDate IS NULL
       SET  @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='proc_addreader')
	DROP PROCEDURE proc_addreader
GO

CREATE PROCEDURE proc_addreader
	@RID varchar(50), --reader ID
	@Rname varchar(50), --reader name
	@Bname varchar(50)  --borrow book name
AS
	BEGIN TRANSACTION
	DECLARE @errorSum int
	SET @errorSum=0
	UPDATE Book SET BCount=BCount-1 WHERE(BName=@Bname)
	SET @errorSum=@errorSum+@@error
	IF EXISTS(SELECT * FROM Reader WHERE RName=@Rname)
		UPDATE  Reader SET LendNum=LendNum+1 WHERE RName=@Rname
	ELSE
		INSERT INTO Reader VALUES(@RID,@RName,1) 
	SET @errorSum=@errorSum+@@error
	DECLARE @BID varchar(50)
    SELECT @BID=BID FROM Book WHERE BName=@Bname
	INSERT INTO Borrow(RID,BID) VALUES (@RID,@BID)
	SET @errorSum=@errorSum+@@error

	IF (@errorSum<>0)
		BEGIN 
			print('失败了')
			ROLLBACK TRANSACTION 
		END 
	ELSE 
		BEGIN 
			print('成功了')
			COMMIT TRANSACTION
		END 
GO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值