您的位置:首页 > 博客中心 > 数据库 >

T-SQL 游标

时间:2022-03-14 08:39

create PROCEDURE [dbo].[WeekTotalPowerBingTuByWeek]
       @DevName varchar(2000),
       @starttime varchar(200)
AS
BEGIN
	SET NOCOUNT ON;
	--Set @DevName='电表1(DTL1110321471),dianbiao$DTL1110321471;电表2(DTL1110321470),dianbiao$DTL1110321470;'
	Declare @pointID varchar(300)
	Declare @pointName varchar(300)
	Create table #tempTable
	(
	  pointName varchar(200),
	  pointValue float
	)
	create table #tempTables
	(
	   pointID varchar(2000),
	   pointName varchar(2000)
    )
	declare @temp table(col varchar(2000))
	--set @str=replace(@str,'|',',')
	while(len(@DevName)>0)
	begin
	insert into @temp
	select left(@DevName,charindex(';',@DevName)-1)
	set @DevName=stuff(@DevName,1,charindex(';',@DevName),'')
	end

	declare @name varchar(2000)
	declare @value varchar(2000)
	declare cur cursor for  select * from @temp
	open cur--打开游标
	fetch next from cur into @name
				 while @@FETCH_STATUS=0  --判断是否成功获取数据
				 begin
				 declare @str1 varchar(2000)
				 declare @str2 varchar(2000)
				 select @str1=left(@name,charindex(',',@name)-1)
				 select @str2=substring(@name,charindex(',',@name)+1,LEN(@name))
				  insert into #tempTables values (@str2,@str1)
				 fetch next from cur into @name
				 end
				close cur --关闭游标
	deallocate cur
	Declare @starttimes varchar(200)
	Declare @endtime varchar(200)
	select @starttimes=dateadd(day,-datepart(weekday,@starttime)+1,@starttime)--开始时间
	select @endtime=dateadd(day,7-datepart(weekday,@starttime)+2,@starttime)--结束时间
	Declare Cur cursor for
	select pointID,pointName from #tempTables
			open Cur
			fetch next from cur into @pointID,@pointName
			 while @@FETCH_STATUS=0  --判断是否成功获取数据
			 begin
				create table #temp
				(
				   inValue float
				)
				declare @inValue float
				Declare @sql varchar(8000)
				Set @sql='insert into #temp select round(SUM(incrementValue),2) as incrementValue  from TAB_DAY_'+@pointID+'
						  where  GetValueTime > '''+@starttimes+''' and GetValueTime < '''+@endtime+''''
				exec(@sql)
				select @inValue=inValue from #temp
				insert into #tempTable(pointName,pointValue) values (@pointName,@inValue)
				drop table #temp
			   fetch next from cur into @pointID,@pointName
			 end
			close cur --关闭游标
			deallocate cur
			select * from #tempTable
            drop table #tempTable
            drop table #tempTables
END

        
                                    

热门排行

今日推荐

热门手游