create proc zfpro
@kssj varchar(50),@jssj varchar(50)
as
declare @count int,@ksjg varchar(50),@jsjg varchar(50),@cj varchar(50),@i int,@cjl varchar(50)
select  @count=count(id)  from gpinfo create table #lsb(ksjg varchar(50),jsjg varchar(50),cj varchar(50),cjl varchar(50))declare   curA   cursor   for  
select   id   from   gpinfodeclare
@j   intopen   curA fetch   next   from   curA   into   @j while   @@fetch_status = 0begin select @ksjg=spj  from  gpeinfo   where  dat=@kssj  order by id 
select @jsjg=spj  from  gpeinfo   where  dat=@jssj  order by id
set @cj=convert(float,cast(@jsjg as float))-convert(float,cast(@ksjg as float))
set @cjl=(convert(float,cast(@jsjg as float))-convert(float,cast(@ksjg as float)))/convert(float,cast(@ksjg as float))
insert into #lsb(ksjg,jsjg,cj,cjl) values (@ksjg,@jsjg,@cj,@cjl)

        fetch   next   from   curA   into   @j end close   curA 
deallocate   curA select * from #lsb
go   
     
为什么 我得到的数据 都是一样的。 循环了。但是没有循环读取数据。为什么。如图所示:ksjg     jsjg      cj        cjl
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254
10.05 9.9 -0.15 -0.0149254

解决方案 »

  1.   

    fetch   next   from   curA   into   @j 只获取@j,但是一直没有使用
      

  2.   


    while   @@fetch_status = 0begin    select @ksjg=spj  from  gpeinfo   where  dat=@kssj  order by id 
        select @jsjg=spj  from  gpeinfo   where  dat=@jssj  order by id
        set @cj=convert(float,cast(@jsjg as float))-convert(float,cast(@ksjg as float))
        set @cjl=(convert(float,cast(@jsjg as float))-convert(float,cast(@ksjg as float)))/convert(float,cast(@ksjg as float))
        insert into #lsb(ksjg,jsjg,cj,cjl) values (@ksjg,@jsjg,@cj,@cjl)
        
            fetch   next   from   curA   into   @j end 
    --没有使用@j的情况出现!
      

  3.   

    --看下面的注释:
    CREATE PROC Zfpro @kssj VARCHAR(50),  --@kssj:参数1
                      @jssj VARCHAR(50)   --@jssj:参数2
    AS
      DECLARE @count INT,
              @ksjg  VARCHAR(50),
              @jsjg  VARCHAR(50),
              @cj    VARCHAR(50),
              @i     INT,
              @cjl   VARCHAR(50)  SELECT @count = COUNT(id)
      FROM   gpinfo  CREATE TABLE #lsb
        (
           ksjg VARCHAR(50),
           jsjg VARCHAR(50),
           cj   VARCHAR(50),
           cjl  VARCHAR(50)
        )  DECLARE curA CURSOR FOR
        SELECT id
        FROM   gpinfo
      DECLARE @j INT  OPEN curA  FETCH NEXT FROM curA INTO @j  WHILE @@FETCH_STATUS = 0
        BEGIN
            SELECT @ksjg = spj --按@kssj查询出来的@ksjg是不变的
            FROM   gpeinfo
            WHERE  dat = @kssj --@kssj:只使用了一次
            ORDER  BY id        SELECT @jsjg = spj  --按@jssj查询出来的@jsjg是不变的
            FROM   gpeinfo
            WHERE  dat = @jssj --@jssj:只使用了一次
            ORDER  BY id        SET @cj=CONVERT(FLOAT, CAST(@jsjg AS FLOAT)) - CONVERT(FLOAT, CAST(@ksjg AS FLOAT)) --@cj不变,因为@jsjg和@ksjg没变
            SET @cjl=( CONVERT(FLOAT, CAST(@jsjg AS FLOAT)) - CONVERT(FLOAT, CAST(@ksjg AS FLOAT)) ) / CONVERT(FLOAT, CAST(@ksjg AS FLOAT)) --@cjl不变,同上        INSERT INTO #lsb
                        (ksjg,
                         jsjg,
                         cj,
                         cjl)
            VALUES      (@ksjg,
                         @jsjg,
                         @cj,
                         @cjl)        FETCH NEXT FROM curA INTO @j
        END  CLOSE curA  DEALLOCATE curA  SELECT *
      FROM   #lsbGO 
      

  4.   


    create proc zfpro
    @kssj varchar(50),@jssj varchar(50)as
    declare @count int,@ksjg varchar(50),@jsjg varchar(50),@cj varchar(50),@i int,@cjl varchar(50)
    select  @count=count(id)  from gpinfo create table #lsb(ksjg varchar(50),jsjg varchar(50),cj varchar(50),cjl varchar(50),gpid varchar(50))
    declare  @gpid   intdeclare   curA   cursor   for  
    select   gpid   from   gpinfoopen   curA fetch   next   from   curA   
    into    @gpidwhile   @@fetch_status = 0begin select @ksjg=spj  from  gpeinfo   where  dat=@kssj  order by id 
    select @jsjg=spj,@gpid=gpid  from  gpeinfo   where  dat=@jssj  order by id
            select @gpid=gpid from gpinfo  where id=@gpid
    set @cj=convert(float,cast(@jsjg as float))-convert(float,cast(@ksjg as float))
    set @cjl=(convert(float,cast(@jsjg as float))-convert(float,cast(@ksjg as float)))/convert(float,cast(@ksjg as float))
    insert into #lsb(ksjg,jsjg,cj,cjl,gpid) values (@ksjg,@jsjg,@cj,@cjl,@gpid)

    FETCH NEXT FROM curA  
    INTO @gpid
    end close   curA 
    deallocate   curA select * from #lsbgo   
    我又改了一下。现在呢。现在用了吧!
      

  5.   

    还有 dat = @kssj  的数据有很多条!