sql server 游标的解决办法
2022-11-12 09:55:54
内容摘要
这篇文章主要为大家详细介绍了sql server 游标的简单示例,具有一定的参考价值,可以用来参考一下。
对此感兴趣的朋友,看看idc笔记做的技术笔记。SQL代码如下:
alter procedure
文章正文
这篇文章主要为大家详细介绍了sql server 游标的简单示例,具有一定的参考价值,可以用来参考一下。
对此感兴趣的朋友,看看idc笔记做的技术笔记。SQL代码如下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | <code class = "sql" > alter procedure p_SlideAvg ( @CityStr nvarchar(400),--城市字符串 @StationID nvarchar(10),--站点编号 @Type nvarchar(10),--类型 @sDate datetime, --开始时间 @eDate datetime --结束时间 ) --set @CityStr= '06' --set @Type= 'O3' --set @sDate= '2008-03-20' --set @eDate= '2008-04-20' as declare @CityID nvarchar(10) --城市ID -- declare @StationID nvarchar(10)--站点ID declare @channel_num nvarchar(10)--类型的channel_num --先删除数据 declare @sqlD nvarchar(1000) set @sqlD= 'delete from TAB_SlideAvg where stationID=' '' +@StationID+ '' ' and Date_Time>=' '' +convert(varchar,@sDate,120)+ '' ' and date_time<=' '' +convert(varchar,@eDate,120)+ '' '' exec sp_executesql @sqlD declare C_SlideAvg cursor for select a.id as CityID,b.id as StationId,c.channel_num from TAB_BASE_GROUP as a,TAB_STATION_BASEINFO as b, tab_channel_baseinfo as c where a.id=b.group_id and b.id=c.station_id and upper(c.channel_name)=upper(@Type) and b.id=@StationID and c.channel_state = 1 open C_SlideAvg --打开游标 fetch next from C_SlideAvg into @CityID,@StationID,@channel_num while (@@fetch_status=0) begin ------------------------------------------------------------------------------------------------------------------------------ declare @days int --间隔的天数 declare @i int set @i=0 set @days=datediff(day,@sDate,@eDate) declare @mDate datetime --开始循环日期相加 while @i<@days begin set @i=@i+1 set @mDate=DATEADD(day,@i,@sDate) --循环的每一天的变量 print convert(varchar,@mDate,120) declare @h int set @h=0 while @h<24--循环24小时 begin declare @h24 datetime --set @h24=DATEADD(Hour,@h,@mDate) set @h24=dateadd(second,59,dateadd(minute,59,dateadd(hour,@h,@mDate)))--时间添加上@h个小时 59分59秒 declare @oldH datetime set @oldH=DATEADD(Hour,-7,@h24) --当前小时数 减去7小时 declare @sql1 nvarchar(1000) declare @slideAvg real set @sql1= 'select @slideAvg=avg(val) from S' +@StationID+ 'HN where channel_num=' '' +@channel_num+ '' ' and date_time>=' '' +convert(nvarchar,@oldH,120)+ '' ' and date_time<=' '' +convert(nvarchar,@h24,120)+ '' '' exec sp_executesql @sql1,N '@slideAvg real output' ,@slideAvg output IF @slideAvg IS NOT NULL AND @slideAvg<> '' begin declare @sql2 nvarchar(1000) set @sql2= 'insert into Tab_Slideavg values(' '' +@CityID+ '' ',' '' +@StationID+ '' ',' '' +@channel_num+ '' ',' '' +convert(varchar,@h24,120)+ '' ',' '' +convert(varchar,@slideAvg,120)+ '' ')' exec sp_executesql @sql2 end set @h=@h+1 --时间每次循环+1 end end ------------------------------------------------------------------------------------------------------------------------------- fetch next from C_SlideAvg into @CityID,@StationID,@channel_num --取下一条记录 end close C_SlideAvg--关闭游标 deallocate C_SlideAvg--销毁游标 ---- 来自www.512pic.com </code> |
注:关于sql server 游标的简单示例的内容就先介绍到这里,更多相关文章的可以留意
代码注释