CREATE PROCEDURE  jz 
@yj  int ,
@qf int ,
@ypmc varchar(50),
@js int,
@zj int 
AS
DECLARE jz CURSOR
KEYSET
FOR select 处方.剂数,药品总库.整价 ,药品总库.总量 from 处方 , 药品总库, 处方药品
where exists
(select  处方药品.药品名称 from  处方药品 , 处方
where 处方药品.处方编号=处方.处方编号 and 药品名称=@ypmc)
DECLARE @yj int,@qf int,@js int,@zj int 
open jz
FETCH NEXT FROM jz INTO @js,@zj
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN set @yj=@js*','*@zj
        END
FETCH NEXT FROM jz  INTO @js,@zj
END
CLOSE jz
DEALLOCATE jz
GO

解决方案 »

  1.   

    create procedure ProJZ --存储过程名称和游标的名称相同,要改
    /*    @yj int,
        @qf int,
        @ypmc varchar(50),
        @js int,
        @zj int */   --没看出这些参数有什么用,因为它们和下面的名称一模一样
    as
    declare CurJZ cursor keyset for
    select 处方.剂数,药品总库.整价 ,药品总库.总量
    from 处方, 药品总库, 处方药品
    where exists (select  处方药品.药品名称 
                  from  处方药品 , 处方
                  where 处方药品.处方编号=处方.处方编号 and 药品名称=@ypmc)
    declare @yj int,@qf int,@js int,@zj int 
    open CurJZ
    fetch next from CurJZ into @js,@zj   --游标有三个字段,而这里只有两个,不对称,下同
    while @@fetch_status = 0  --这里直接这样就行了,下面的if语句也可以去掉
    begin
    if (@@fetch_status <> -2)
    begin set @yj=@js*','*@zj   --这个是什么意思,乘号的操作数不能是逗号的,
            end
    fetch next from CurJZ  into @js,@zj
    end
    close CurJZ
    deallocate CurJZ
    go总的来说不知道LZ要干什么???!!!