数据库 插入更新表内容的存储过程

该存储过程用于统计道具系统的每日报告数据,通过遍历应用列表并汇总各应用内的订单数量、实际支付金额及用户数量,然后更新或插入到日报表中。

gooliugle 原文 插入更新表内容的存储过程

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:      <xxxx>
-- Create date: <2011-03-15>
-- Description: <道具系统日报表统计>
-- =============================================
ALTER PROCEDURE [dbo].[sp_PropsReport_DaySync]

AS
BEGIN

--循环读取TbApps里的数据
--声明游标
DECLARE cursor_App CURSOR
FOR
SELECT Id FROM TbApps

--打开游标
OPEN cursor_App
DECLARE @AppId int

DECLARE @ReportDay VARCHAR(10), @OrderCount INT, @ActAmt INT,@PersonCount INT

SELECT @ReportDay=CONVERT(VARCHAR(10),DATEADD(dd, -1, GETDATE()),120)

--统计TbPropsOrder里的Status=2的所有已扣费数据
FETCH NEXT FROM cursor_App INTO @AppId
WHILE @@fetch_status=0
BEGIN
    SET @ActAmt=0
    SET @OrderCount=0
    SET @PersonCount=0
    
    SELECT @ActAmt=ISNULL(SUM(ActPay),0), @OrderCount=COUNT(1),@PersonCount=COUNT(DISTINCT SndaId)
    FROM TbPropsOrder(NOLOCK)
    WHERE AppId=@AppId AND Status=2 
    AND LogTime>=@ReportDay AND LogTime<CONVERT(VARCHAR(10),GETDATE(),120)
    
    IF EXISTS(SELECT 1 FROM TbPropsOrderDayReport(NOLOCK) WHERE ReportDay=@ReportDay AND AppId=@AppId)
        UPDATE TbPropsOrderDayReport
        SET OrderCount=@OrderCount, ActAmt=@ActAmt ,PersonCount = @PersonCount
        WHERE ReportDay=@ReportDay AND AppId=@AppId
    ELSE
        INSERT TbPropsOrderDayReport(ReportDay, OrderCount, ActAmt, AppId,PersonCount)
        VALUES(@ReportDay, @OrderCount, @ActAmt, @AppId,@PersonCount)
        
    FETCH NEXT FROM cursor_App INTO @AppId
END

--关闭游标
CLOSE cursor_App
--释放游标
DEALLOCATE cursor_App

END
GO

SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值