表:
--借书信息表
create table Borrow(
图书编号 int not null,
读者编号 int not null,
借阅日期 datetime not null,
应还日期 datetime not null
)insert into Borrow values (111,611,'2007-01-01','2008-01-01')
insert into Borrow values (112,612,'2007-01-02','2008-01-02')
insert into Borrow values (113,613,'2007-01-03','2008-01-03')
insert into Borrow values (114,614,'2007-01-04','2008-01-04')
insert into Borrow values (115,615,'2007-01-05','2008-01-05')
insert into Borrow values (116,616,'2007-01-06','2008-01-06')
insert into Borrow values (117,617,'2007-01-07','2009-01-07')
insert into Borrow values (118,618,'2007-01-08','2009-01-08')
insert into Borrow values (119,619,'2007-01-08','2009-01-08')要实现:根据编号查询读者到期的图书个数存储过程:
create procedure GetOverDateNum
@ReaderID int,@BookNum int output
as
select @BookNum=count(*) from Borrow
where 读者编号=@ReaderID
and datediff(day,应还日期,getdate())>0调用:
declare @num int 
exec GetOverDateNum @ReaderID=612,@BookNum=@num output  select '到期册数是:',@num
这个调用过程麻烦给解释一下。。谢谢。。特别是什么要做一个@num这个变量,还要@BookNum=@num,
最后一句:select '到期册数是:',@num   为什么要这么写,这不是语法有问题吗???

解决方案 »

  1.   

    @BookNum=@num 这个也可以直接写 @num,前面的形参名称可以省略,也可以写起的。
    因为 @BookNum 是输出参数(创建存储过程时指定了 output),所以必须要一个 @num 用来接收输出。
      

  2.   

    @BookNum=@num output 这是输出参数调用的格式。。
    select @num这是把输出参数输出来。 其实这一句没有必要要因为你前面有一句select @BookNum=count(*) from Borrow 
    where 读者编号=@ReaderID 
    and datediff(day,应还日期,getdate())>0 就够了。。
      

  3.   

    exec GetOverDateNum @ReaderID=612,@BookNum=@num output  select '到期册数是:',@num 
    上面应该分成两行吧。
    select '到期册数是:',@num 是没问题的,相当于一个字段值是:'到期册数是:',另一个字段值就是 @num
      

  4.   

    @num这个变量是OUTPUT的,它是做为一个参数传到GetOverDateNum里并返回书籍个数的.最后一句:select '到期册数是:',@num没有问题,因为@num是GetOverDateNum返回的值
      

  5.   


    @BookNum=@num 这个也可以直接写 @num,前面的形参名称可以省略,也可以写起的。 
    这个是不能省略的,如果没写成@BookNum=@num,格式出错,编绎通不过