当前位置: 首页 > news >正文

在SQL SERVER 中如何用脚本实现每日自动调用存储过程

在 SQL Server 中实现存储过程的每日自动执行,需通过 ​​SQL Server 代理作业​​调度完成。以下是详细步骤:


一、创建存储过程

首先定义需定时执行的逻辑。以下示例为每日清理日志的存储过程:

CREATE PROCEDURE dbo.DailyCleanup
AS
BEGINSET NOCOUNT ON;-- 示例:删除30天前的日志DELETE FROM LogTable WHERE CreatedDate < DATEADD(DAY, -30, GETDATE());PRINT '日志清理完成:' + CONVERT(VARCHAR, GETDATE());
END

​关键点​​:

  • 使用 SET NOCOUNT ON 减少网络流量。
  • 存储过程需预先测试确保逻辑正确。

二、配置SQL Server代理作业

1. ​​启用SQL Server代理服务​
  • 在 ​​SQL Server Management Studio (SSMS)​​ 中:
    1. 展开对象资源管理器 → 右键 SQL Server 代理 → 选择 启动(若未运行)。
    2. 设置服务自动启动(避免重启后失效):
      • 打开 services.msc → 找到 SQL Server 代理 → 设置启动类型为 ​​自动​​。
2. ​​创建作业​
USE msdb;
GO
-- 1. 创建作业
EXEC dbo.sp_add_job@job_name = 'DailyCleanupJob',@enabled = 1;-- 2. 添加作业步骤(执行存储过程)
EXEC sp_add_jobstep@job_name = 'DailyCleanupJob',@step_name = 'RunCleanup',@subsystem = 'TSQL',@database_name = 'YourDatabase', -- 替换为数据库名@command = 'EXEC dbo.DailyCleanup'; -- 调用存储过程-- 3. 设置每日调度计划
EXEC sp_add_schedule@schedule_name = 'DailySchedule',@freq_type = 4,        -- 每天执行@freq_interval = 1,     -- 每1天@active_start_time = '010000'; -- 凌晨1点执行(格式HHMMSS)-- 4. 将调度绑定到作业
EXEC sp_attach_schedule@job_name = 'DailyCleanupJob',@schedule_name = 'DailySchedule';-- 5. 指定目标服务器(默认为本地)
EXEC sp_add_jobserver@job_name = 'DailyCleanupJob',@server_name = @@SERVERNAME;
GO

​参数说明​​:

  • @freq_type=4:按天调度;@freq_type=8 表示按周(配合 @freq_interval 指定星期几)。
  • @active_start_time:可设置为低峰时段(如凌晨)减少业务影响。

三、监控与管理作业

  • ​查看作业状态​​:
    EXEC msdb.dbo.sp_help_job @job_name = 'DailyCleanupJob'; 
  • ​手动启动作业​​:
    EXEC msdb.dbo.sp_start_job 'DailyCleanupJob'; 
  • ​修改/删除作业​​:
    • 在 SSMS 中:SQL Server 代理 → 作业 → 右键操作
    • 脚本删除:EXEC sp_delete_job @job_name='DailyCleanupJob';

四、注意事项

  1. ​权限要求​​:
    • 创建存储过程需 CREATE PROCEDURE 权限。
    • 操作 SQL Server 代理需 sysadmin 角色。
  2. ​错误处理​​:
    • 在存储过程中添加 TRY...CATCH 块捕获异常。
    • 记录执行日志(如插入日志表)便于排查。
  3. ​性能优化​​:
    • 复杂存储过程可添加 WITH RECOMPILE 选项避免执行计划老化。

五、扩展:其他调度方案

  • ​多时段执行​​(如每小时一次):
    @freq_subday_type = 0x8,     -- 按小时
    @freq_subday_interval = 1    -- 每1小时
  • ​单次执行​​(如备份后):
    @freq_type = 1,              -- 仅一次
    @active_start_time = '20250801 030000' -- 指定时间

⚠️ 若需修改现有作业计划,可通过 sp_update_schedule 或 SSMS 界面调整参数。完整脚本示例可参考 SQL Server 代理作业配置文档。

http://www.lryc.cn/news/606979.html

相关文章:

  • 将本地commit已经push到orgin后如何操作
  • 微波(Microwave)与毫米波(Millimeter wave)简介
  • windows mamba-ssm环境配置指南
  • 在 Docker 中启动 Nginx 并挂载配置文件到宿主机目录
  • 代码随想录算法训练营第三十八天
  • Mermaid流程图可视化系统:基于Spring Boot与Node.js的三层架构实现
  • h5独立部署
  • (转)mybatis和hibernate的 缓存区别?
  • AG-UI 协议全面解析--下一代 AI Agent 交互框架医疗应用分析(上)
  • 【BUUCTF系列】[GXYCTF2019]Ping Ping Ping 1
  • 智能体的未来:AGI路径上的关键技术突破
  • springboot助农平台
  • 探索 VMware 虚拟机:开启虚拟化世界的大门
  • 人大金仓数据库Kingbase主备集群搭建和部署
  • Spring Boot 2.1.18 集成 Elasticsearch 6.6.2 实战指南
  • 工业环境中无人叉车安全标准深度解析
  • 我用提示词A 对qwen3-4b大模型进行 nl2sql 任务 grpo 强化学习,评估的时候换新提示词,会影响nl2sql测评准确率吗?
  • 数据结构常见时间复杂度整理
  • 数据结构(10)栈和队列算法题
  • 4-verilog简单状态机
  • Linux 硬盘分区管理
  • FEVER数据集:事实验证任务的大规模基准与评估框架
  • spring boot 启动报错---java: 无法访问org.springframework.boot.SpringApplication 错误的类文件
  • Pycaita二次开发基础代码解析:几何体重命名与参数提取技术
  • 【Java面试题】缓存穿透
  • 梯度下降的基本原理
  • Oracle EBS ERP开发 — 抛出异常EXCEPTION书写规范
  • Vue3 setup、ref和reactive函数
  • ReAct模式深度解析:构建具备推理能力的AI智能体架构
  • 【Linux】System V - 责任链模式与消息队列