日期:2014-05-18  浏览次数:20589 次

求大神帮我看看、、、为什么一次执行4000多次呀。5555
这样的,我用游标去循环读(数据就只有一条,为什么会循环4000多次,貌似执行这个的时候把我原来表里面deviceschecktask的数据都删了)、、、小弟找了个例子照着做的呀,分不多,老本儿全押了,求救、、、【以下代码能正常验证通过并执行】
关键代码:BEGIN

declare @orgid varchar(30),@DeviceID char(32),@GenerateTime datetime,@EndTime datetime,@CheckType char(32)
declare @id int 
set @id=1
DECLARE authors_cursor CURSOR FOR (select orgid,DeviceID,GenerateTime,EndTime,CheckType from tPeriodSetting where Datediff(HH,CheckTime,getdate())>=CheckFrequence )
OPEN authors_cursor
FETCH NEXT FROM authors_cursor INTO @orgid,@DeviceID,@GenerateTime,@EndTime,@CheckType
WHILE @@FETCH_STATUS = 0
BEGIN
set @id=@id+1
declare @devicechecktaskid varchar(50)
set @devicechecktaskid=ltrim((SELECT CONVERT(varchar(100), GETDATE(), 112))) + str(@id)
--print @devicechecktaskid
--print @orgid
--print @DeviceID
--print @GenerateTime
--print @EndTime
--print @CheckType

insert into deviceschecktask (devicechecktaskid,orgid,devicesbarcode,taskpriority,taskdispatchtime,EndTime,taskstatus,sourceoftask,tiDeviceType,checktype) values (@devicechecktaskid,@orgid,@DeviceID,'1',@GenerateTime,@EndTime,'待调度','周期任务',0,@CheckType) END
CLOSE authors_cursor 
DEALLOCATE authors_cursor

------解决方案--------------------
肯定要加的,不然永远停在第一行,@@FETCH_STATUS永远是等于0的
------解决方案--------------------
你进入循环体没有FETCH NEXT FROM,这样在WHILE里没有能改变@@FETCH_STATUS的地方,死循环。。。