改错,有时间的来看下
use SubMeteringSystem
go
if exists(select * from sys.views where name='V_BaseAmmeterAttribute')
drop view V_BaseAmmeterAttribute
go
create view V_BaseAmmeterAttribute
as
select top 1 * from T_ST_AmmeterAttribute
where F_BuildID='000001A001'
and F_Date<='2009/1/1'
UNION
select * from T_ST_AmmeterAttribute
where F_BuildID='000001A001'
and F_Date>'2009/1/1' and F_Date<'2010/1/1'
go
if exists(select * from sys.views where name='V_AmmeterAttribute')
drop view V_AmmeterAttribute
go
create view V_AmmeterAttribute
as
select ROW_NUMBER() over(order by F_Date) id,* from V_BaseAmmeterAttribute
go
if exists (select * from sys.procedures where name='Pro_AmmeterAttribute')
drop proc Pro_AmmeterAttribute
go
create procedure Pro_AmmeterAttribute
as
DECLARE @id int,
@sqlstring nvarchar(max),
@endTime nvarchar(30),
@startTime nvarchar(30),
@nextID int
set @id=1
set @id=1
set @sqlstring=''
while(@id<=(select max(id) from V_AmmeterAttribute))
begin
if(@id!=(select max(id) from V_AmmeterAttribute))
begin
select @startTime=F_Date from V_AmmeterAttribute
where id=@id
set @nextID=@id+1
select @endTime=F_Date from V_AmmeterAttribute
where id=@nextID
if(@id=1)
begin
set @sqlstring+='select t1.F_Value * t2.F_Rate from T_EC_EnergyItemResult t1,V_AmmeterAttribute t2
where t2.id= '+CONVERT(nvarchar,@id,4)+'
and t1.F_StartTime>= ''2009/1/1'' and t1.F_StartTime<'+@endTime+'
and t1.F_BuildID= ''000001A001''
UNION
'
end
else
begin
set @sqlstring+='select t1.F_Value * t2.F_Rate from T_EC_EnergyItemResult t1,V_AmmeterAttribute t2
where t2.id= '+CONVERT(nvarchar,@id,4)+'
and t1.F_StartTime>= '+@startTime+' and t1.F_StartTime<'+@endTime+'
and t1.F_BuildID= ''000001A001''
UNION
'
end
end
else
begin
select @startTime=F_Date from V_AmmeterAttribute
where id=@id
set @sqlstring+='select t1.F_Value * t2.F_Rate from T_EC_EnergyItemResult t1,V_AmmeterAttribute t2
where t2.id='+CONVERT(nvarchar,@id,4)+'
and t1.F_StartTime>='+@startTime+' and t1.F_StartTime<''2010/1/1''
and t1.F_BuildID= ''000001A001'' '
end
set @id=@id+1
end
exec(@sqlstring)
go