利用exec方法执行存储过程示例

此博客介绍了一个用于数据库的存储过程,该过程能够针对特定建筑ID,在给定的时间段内,按月汇总各类能耗数据,并进行相应的数据清理与统计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CREATE PROCEDURE [dbo].[proc_AmountEnergy_Month_SingleBuild]
    -- Add the parameters for the stored procedure here    
    @P_BuildID varchar(20)='100000A007',
    @P_Date varChar(20)='2008-01-01',
    @P_LastPeriodNum int=1  --数据持续时段数目    
AS
BEGIN

--分类分项代码指针
DECLARE EnergyItemCodeCur CURSOR FOR select F_EnergyItemCode from T_DT_EnergyItemDict where F_EnergyItemType_Name ='分项能耗' and F_EnergyItemState=1

--Declare @BuildID varchar(16)
Declare @EnergyItemCode varchar(16)
Declare @dbValue Decimal(18,2)
Declare @StartT varchar(20)
Declare @EndT varchar(20)
Declare @i int
DECLARE @Sql varchar(2000)

set @Sql=''
--
set @i=0;
set @StartT=left(@P_Date,7) + '-01 00:00:00';
while @i<@P_LastPeriodNum
begin
    set @EndT=convert(varchar(20),dateadd(day,-1,dateadd(month,1,@StartT)),120)
    OPEN EnergyItemCodeCur
    FETCH NEXT FROM EnergyItemCodeCur Into @EnergyItemCode
    WHILE @@FETCH_STATUS = 0
        begin
        --先清理记录
          set @Sql='delete from T_EC_EnergyItemMonthResult where F_BuildID ='''+@P_BuildID +''' and F_EnergyItemCode='''+@EnergyItemCode +''' and F_StartMonth ='''+@StartT+''' and F_EndMonth ='''+@EndT +''''
          print '语句执行:'  + @sql
         exec(@sql);
            --将指定建筑ID、能耗分项的日数据统计出来
            --insert into T_EC_EnergyItemMonthResult(F_MonthResultID,F_BuildID,F_EnergyItemCode,F_StartMonth,F_EndMonth,F_MonthValue,F_MonthEquValue,F_DayMaxValue,F_DayMaxEquValue,F_DayMinValue,F_DayMinEquValue,F_State)  
            --            select '',@P_BuildID,@EnergyItemCode,@StartT,@EndT,sum(Day_Energy),sum(Day_Energy)*0.1229,max(Day_Energy) ,max(Day_Energy)*0.1229,min(Day_Energy) ,min(Day_Energy) *0.1229,1
            --            from (SELECT DISTINCT     F_BuildID ,    F_EnergyItemCode,
            --                 CAST(YEAR(F_StartDay) AS varchar(4)) + '年' + DATENAME(mm, F_StartDay) + '月' AS 年月,
            --                 CAST(F_DayValue AS decimal(18, 2)) AS Day_Energy FROM  T_EC_EnergyItemDayResult
                --             where F_StartDay >=@StartT and F_EndDay<= @EndT and F_BuildID=@P_BuildID and F_EnergyItemCode = @EnergyItemCode ) a group by F_BuildID,F_EnergyItemCode,年月


          set @Sql =' insert into T_EC_EnergyItemMonthResult(F_MonthResultID,F_BuildID,F_EnergyItemCode,F_StartMonth,F_EndMonth,F_MonthValue,F_MonthEquValue,F_DayMaxValue,F_DayMaxEquValue,F_DayMinValue,F_DayMinEquValue,F_State) '
          set @Sql=@Sql+' select '''','''+@P_BuildID+''','''+@EnergyItemCode+''','''+@StartT+''','''+@EndT+''',sum(Day_Energy),sum(Day_Energy)*0.1229,max(Day_Energy) ,max(Day_Energy)*0.1229,min(Day_Energy) ,min(Day_Energy) *0.1229,1 '
          set @Sql=@Sql+' from (SELECT DISTINCT     F_BuildID ,    F_EnergyItemCode,
                             CAST(YEAR(F_StartDay) AS varchar(4)) + ''年'' + DATENAME(mm, F_StartDay) + ''月'' + DATENAME(dd, F_StartDay) + ''日'' AS 年月日, '
          set @Sql=@Sql+' CAST(F_DayValue AS decimal(18, 2)) AS Day_Energy FROM  T_EC_EnergyItemDayResult '
            set @Sql=@Sql+ '                 where F_StartDay >='''+@StartT+''' and F_EndDay<= '''+@EndT+''' and F_BuildID='''+@P_BuildID+''' and F_EnergyItemCode = '''+@EnergyItemCode+''' ) a group by F_BuildID,F_EnergyItemCode,年月日'
           exec (@sql)
           print @sql
           if @@ERROR  <> 0
           begin
              print '语句执行错误<err='+cast(@@ERROR as varchar(10)) +'>:
                    ' + @sql
            
           end

            FETCH NEXT FROM EnergyItemCodeCur Into @EnergyItemCode
        end
    CLOSE EnergyItemCodeCur
    set @i=@i+1
end
DEALLOCATE EnergyItemCodeCur
END

GO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值