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
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的情况出现!
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
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
我又改了一下。现在呢。现在用了吧!