当前位置: 首页 > 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.dtcms.com/a/309573.html

相关文章:

  • 大模型开发框架LangChain之构建知识库
  • 高速公路桥梁安全监测系统解决方案
  • 技术栈:基于Java语言的搭子_搭子社交_圈子_圈子社交_搭子小程序_搭子APP平台
  • 安全专家发现利用多层跳转技术窃取Microsoft 365登录凭证的新型钓鱼攻击
  • 【C#学习Day14笔记】泛型、集合(数组列表Arraylist、列表list)与字典
  • Python 中的可迭代、迭代器与生成器——从协议到实现再到最佳实践
  • 最新docker国内镜像源地址大全
  • AttributeError: ChatGLMTokenizer has no attribute vocab_size
  • 强反光干扰下识别率↑89%!陌讯多模态融合算法在烟草SKU识别的实战解析
  • MySQL分析步
  • U-Net vs. 传统CNN:为什么医学图像分割需要跳过连接?
  • C语言的复合类型、内存管理、综合案例
  • 【AI 加持下的 Python 编程实战 2_12】第九章:繁琐任务的自动化(上)——自动清理电子邮件文本
  • PendingIntent相关流程解析
  • MySQL——事务详解
  • React Refs:直接操作DOM的终极指南
  • RAGFlow Agent 知识检索节点源码解析:从粗排到精排的完整流程
  • Java学习第九十六部分——Eureka
  • Elasticsearch IK 中文分词器指南:从安装、配置到自定义词典
  • IPAM如何帮助企业解决IP冲突、识别未经授权设备并管理子网混乱
  • MAC 升级 Ruby 到 3.2.0 或更高版本
  • ARM Cortex-M 处理器的应用
  • Smart Launcher:安卓设备上的智能启动器
  • ElasticSearch Linux 下安装及 Head 插件 | 详情
  • 设计Mock CUDA库的流程与实现
  • 【秋招笔试】07.27文远知行-第一题
  • Git 实现原理剖析
  • Boost.Asio学习(5):c++的协程
  • Python Flask框架Web应用开发完全教程
  • 后台管理系统权限管理:前端实现详解