课后2
/*
*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
/*
*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
/*
*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
/*
*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