• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    积分获取和消费的存储过程学习示例

    1.GM_JF客户账户积分表

    2. GM_JF_DETAIL客户账户积分消费记录

    3. GM_JF_ACTION _RULES积分动作规则表

    4.GM_JF_GOODS _RULES积分商品规则表

    复制代码 代码如下:

    -- ===============测试=======================================================
    /*
    declare @StatusCode int = 1;
    exec sp_GM_JF_AddScore 'admin','AN_JF_001_001',1,5,0,'',@StatusCode output
    print @StatusCode
    */
    -- ===========================================================================
    /*
    * 判断是否重复获取积分(首次完善个人资料,首次修改密码等等不能重复获取积分)
    * 判断是根据 从GM_JF_DETAIL(详情表)查询周期内的数据条数与GM_JF_ACTION_RULES(动作规则表)内的周期重复次数对比
    * 如果大于等于周期重复次数,则为重复获取积分
    * 接下来
    *     1.详情表的数据入库
    *     2.判断总积分表是否存在对应客户的总积分 没有则插入一条新的,有 则读取其数据,并更新
    *
    */
    ALTER PROCEDURE [dbo].[sp_GM_JF_AddScore]
    @ACCOUNT_ID     varchar(30),
    @JF_CategoryNumber varchar(15),
    @CARD_NUM     int,
    @HQ_JF_AMOUNT     int,
    @State     varchar(16),
    @USE_DESC     varchar(400),

    @StatusCode     int output     -- 状态码: 0:失败 1:成功 2: 不能重复获取
    AS
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    declare
    @repetitionsCycle     float=0,    --周期(天)
    @repetitionsCycle_second    int=0,--周期(秒)
    @repetitionsFrequency     int=0,    --一个周期内允许最大次数
    @realFrequency     int=0,     --实际周期

    @USE_DATE     datetime = GETDATE();
    --是否重复获取积分
    select top(1) @repetitionsCycle=RepetitionsCycle,@repetitionsFrequency=RepetitionsFrequency from GM_JF_ACTION_RULES where AN_CategoryNumber=@JF_CategoryNumber;

    if(@repetitionsCycle1)
    BEGIN
    set @repetitionsCycle_second = (@repetitionsCycle-1)*24*60*60;
    select @realFrequency=COUNT(1) from GM_JF_DETAIL where ACCOUNT_ID=@ACCOUNT_ID and JF_CategoryNumber=@JF_CategoryNumber and USE_DATE = @USE_DATE and USE_DATE >= CONVERT(varchar(19),DATEADD(SECOND,-@repetitionsCycle_second,@USE_DATE),120)
    END
    ELSE
    BEGIN
    select @realFrequency=COUNT(1) from GM_JF_DETAIL where ACCOUNT_ID=@ACCOUNT_ID and JF_CategoryNumber=@JF_CategoryNumber and USE_DATE = @USE_DATE and USE_DATE >= CONVERT(varchar(10),DATEADD(DAY,-(@repetitionsCycle-1),@USE_DATE),120)
    END   

    if(@realFrequency>=@repetitionsFrequency)    --实际周期大于周期次数
    begin
    set @StatusCode = 2;
    return 2;
    end

    declare @count int = 0;     --数据条数
    declare @temp_table table    --表变量
    (
    ACCOUNT_ID varchar(30),
    JF_AMOUNT decimal(16,2),
    TTL_JF_AMOUNT decimal(16,2),
    Last_Update_Time datetime,
    [Version] int
    );

    begin tran;
    --插入详情
    insert into GM_JF_DETAIL
    (ACCOUNT_ID,JF_CategoryNumber,CARD_NUM,HQ_JF_AMOUNT,[State],USE_DESC)
    values
    (@ACCOUNT_ID,@JF_CategoryNumber,@CARD_NUM,@HQ_JF_AMOUNT,@State,@USE_DESC)

    --填充表变量
    insert into @temp_table select ACCOUNT_ID,JF_AMOUNT,TTL_JF_AMOUNT,Last_Update_Time,[Version] from GM_JF where ACCOUNT_ID=@ACCOUNT_ID
    select @count = count(1) from @temp_table;
    --判断并更新总积分(0:添加 其他:修改)
    IF(@count=0)
    begin
    insert into GM_JF(ACCOUNT_ID,JF_AMOUNT,TTL_JF_AMOUNT)
    values
    (@ACCOUNT_ID,@HQ_JF_AMOUNT,@HQ_JF_AMOUNT)
    end
    else
    begin
    declare @JF_AMOUNT int,     --总积分
    @TTL_JF_AMOUNT int,    --可用积分
    @Version int;     --版本号

    select @JF_AMOUNT=JF_AMOUNT,@TTL_JF_AMOUNT=TTL_JF_AMOUNT,@Version=[Version] from @temp_table where ACCOUNT_ID=@ACCOUNT_ID;

    update GM_JF set JF_AMOUNT=(@JF_AMOUNT+@HQ_JF_AMOUNT),TTL_JF_AMOUNT=(@TTL_JF_AMOUNT+@HQ_JF_AMOUNT),Last_Update_Time=GETDATE(),[Version]=(@Version+1) where ACCOUNT_ID=@ACCOUNT_ID
    end

    Commit tran;
    set @StatusCode = 1;

    IF(@@ERROR>0)
    BEGIN
    set @StatusCode = 0;
    ROLLBACK tran;
    END
    END

    您可能感兴趣的文章:
    • sqlserver数据库使用存储过程和dbmail实现定时发送邮件
    • 用存储过程向数据库存值的具体实现
    • MSSQL监控数据库的DDL操作(创建,修改,删除存储过程,创建,修改,删除表等)
    • sqlSQL数据库怎么批量为存储过程/函数授权呢?
    • mysql 导入导出数据库以及函数、存储过程的介绍
    • Oracle中 关于数据库存储过程和存储函数的使用
    • sql处理数据库锁的存储过程分享
    • SQL Server中通过扩展存储过程实现数据库的远程备份与恢复
    • MSSQL MySQL 数据库分页(存储过程)
    • 从创建数据库到存储过程与用户自定义函数的小感
    • SQLserver 数据库危险存储过程删除与恢复方法
    • sqlserver关于分页存储过程的优化【让数据库按我们的意思执行查询计划】
    • mysql 查询数据库中的存储过程与函数的语句
    • 分页存储过程(用存储过程实现数据库的分页代码)
    • 为数据库生成某个字段充填随机数的存储过程
    • sql 判断数据库,表,存储过程等是否存在的代码
    • Oracle存储过程之数据库中获取数据实例
    • sqlserver 复制表 复制数据库存储过程的方法
    上一篇:MSSQL报错:参数数据类型 text 对于 replace 函数的参数 1 无效的解决办法
    下一篇:sql多表行转列、级联行转列示例代码
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    积分获取和消费的存储过程学习示例 积分,获取,和,消费,的,存储,