Hi,请  登录  或  注册

【实战分享】SQL Server 实现网狐房间胜负数据定时统计的完整任务脚本解析

最近在维护一套老系统时翻出一段还在稳定运行的 SQL Server 作业任务代码,功能是定时统计房间玩家的胜负情况,用于构建游戏数据中心里的输赢记录表。这类脚本在很多棋牌类、竞技类或匹配类服务器中都很常见,尤其是用到网狐框架的项目。

本篇文章就来详细讲讲这个统计任务的脚本结构,包括作业创建、任务步骤定义、调度计划安排、调用存储过程等逻辑,非常适合对 sql Agent 有实战需求的同学参考。

【实战分享】SQL Server 实现网狐房间胜负数据定时统计的完整任务脚本解析


一、这个脚本主要解决什么问题?

在实际棋牌项目或竞技平台中,每天都有成千上万条对局数据产生。为了后续能够在排行榜、数据面板、用户分析等功能中使用这些输赢数据,就需要定时对战绩数据做整理和归档

这段脚本的目的就是通过 SQL Server 的 Agent 定时任务机制,去定时调用一个统计存储过程,把指定房间的对局记录转为用户胜负统计表结构,这样后续开发使用就方便得多了。


二、脚本内容结构简介

本脚本是一个典型的 SQL Server Agent 任务定义脚本,执行流程分为以下几个核心步骤:

  1. 创建作业分类(Job Category)

  2. 注册作业(Job)

  3. 添加作业步骤(执行统计过程)

  4. 设置调度规则(每天执行一次)

  5. 绑定执行服务器(本地)

每一步都封装在事务中,异常即回滚,逻辑严谨、结构清晰。


三、关键部分拆解说明

✅ 1. Job 分类定义(JobCategory)

这部分代码的作用是确保脚本运行时,有一个名为 [Uncategorized (Local)] 的默认作业分类可用。

IF NOT EXISTS (
  SELECT name FROM msdb.dbo.syscategories 
  WHERE name=N'[Uncategorized (Local)]' AND category_class=1
)
BEGIN
  EXEC msdb.dbo.sp_add_category 
    @class=N'JOB', 
    @type=N'LOCAL', 
    @name=N'[Uncategorized (Local)]'
END

如果分类不存在,它就会自动创建,方便后续作业归类管理。


✅ 2. 创建作业(Add Job)

接着我们通过 sp_add_job 注册一个名为 胜负计数统计 的任务,同时指定执行权限和所属分类。

EXEC sp_add_job 
  @job_name=N'胜负计数统计', 
  @enabled=1,
  @description=N'定时统计玩家房间胜负数据',
  @category_name=N'[Uncategorized (Local)]',
  @owner_login_name=N'kawu789sfk',
  @job_id=@jobId OUTPUT

作业名称可以自定义,但要确保在系统中唯一。

✅ 3. 添加作业步骤:调用统计存储过程

这一步是任务的核心,即设定作业要执行什么内容。在这个例子中,它调用的是如下过程:

exec RYTreasureDB.dbo.GSP_GR_RoomWinRateToUserRecord 2

这是一个自定义存储过程,用来将房间 ID 为 2 的数据整理成用户维度的胜负记录表。

EXEC sp_add_jobstep 
  @job_id=@jobId, 
  @step_name=N'胜负技术统计',
  @subsystem=N'TSQL', 
  @command=N'exec RYTreasureDB.dbo.GSP_GR_RoomWinRateToUserRecord 2',
  @database_name=N'RYTreasureDB'

✅ 4. 设置调度时间:每天执行一次

脚本中设定这个任务为每天运行一次,起始日期为 2019年2月15日,结束时间设置为远未来(9999年),保障长期运行:

EXEC sp_add_jobschedule 
  @job_id=@jobId, 
  @name=N'胜负统计', 
  @freq_type=4, -- 每天
  @active_start_date=20190215, 
  @active_end_date=99991231, 
  @active_start_time=000000, 
  @active_end_time=235959

你可以根据实际需求调整执行频率,例如每小时、每分钟等。

✅ 5. 绑定服务器(Add JobServer)

最后一步将作业绑定到服务器本地,使其可以在部署后自动运行:

EXEC sp_add_jobserver 
  @job_id = @jobId, 
  @server_name = N'(local)'

绑定成功后,SQL Server Agent 会根据调度规则定时触发作业执行。

文章名称:【实战分享】SQL Server 实现网狐房间胜负数据定时统计的完整任务脚本解析
除非特别注明,本站所有文章均为原创,转载请注明出处:264玫瑰资源库
部分教程资源来源于互联网,请谨慎辨别广告内容,避免上当受骗!

评论 抢沙发

登录

找回密码

注册