一段时间延迟后从触发器执行存储过程

2023-11-27

我想从触发器调用存储过程, 如何在x分钟后执行该存储过程? 我正在寻找除此之外的其他东西WAITFOR DELAY

thanks


有一个定期运行并从表中提取存储过程参数的 SQL 代理作业 - 这些行还应指示存储过程的运行时间,因此 SQL 代理作业将仅选择到期/稍微逾期的行。它应该在调用存储过程后删除行或标记它们。

然后,在触发器中,只需将新行插入同一个表中。

You do not想要将任何内容放入触发器中,从而以任何方式影响原始事务的执行 - 您绝对不希望造成任何延迟,或与同一数据库之外的任何内容进行交互。


例如,如果存储过程是

CREATE PROCEDURE DoMagic
    @Name varchar(20),
    @Thing int
AS
  ...

然后我们创建一个表:

CREATE TABLE MagicDue (
    MagicID int IDENTITY(1,1) not null, --May not be needed if other columns uniquely identify
    Name varchar(20) not null,
    Thing int not null,
    DoMagicAt datetime not null
)

SQL 代理作业将执行以下操作:

WHILE EXISTS(SELECT * from MagicDue where DoMagicAt < CURRENT_TIMESTAMP)
BEGIN
    DECLARE @Name varchar(20)
    DECLARE @Thing int
    DECLARE @MagicID int

    SELECT TOP 1 @Name = Name,@Thing = Thing,@MagicID = MagicID from MagicDue where DoMagicAt < CURRENT_TIMESTAMP

    EXEC DoMagic @Name,@Thing

    DELETE FROM MagicDue where MagicID = @MagicID
END

触发器只会有:

CREATE TRIGGER Xyz ON TabY after insert
AS
    /*Do stuff, maybe calculate some values, or just a direct insert?*/
    insert into MagicDue (Name,Thing,DoMagicAt)
    select YName,YThing+1,DATEADD(minute,30,CURRENT_TIMESTAMP) from inserted

如果您运行的版本不支持代理,那么您可能必须伪造它。我过去所做的是创建一个包含“穷人代理作业”的存储过程,如下所示:

CREATE PROCEDURE DoBackgroundTask
AS

     WHILE 1=1
     BEGIN
         /* Add whatever SQL you would have put in an agent job here */

         WAITFOR DELAY '00:05:00'
     END

然后,创建第二个存储过程,这次是在master数据库,等待 30 秒,然后调用第一个过程:

CREATE PROCEDURE BootstrapBackgroundTask
AS
    WAITFOR DELAY '00:00:30'
    EXEC YourDB..DoBackgroundTask

然后,将此过程标记为启动过程,使用sp_procoption:

EXEC sp_procoption N'BootstrapBackgroundTask', 'startup', 'on'

并重新启动服务 - 您现在将有一个连续运行的查询。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一段时间延迟后从触发器执行存储过程 的相关文章

随机推荐

  • 正则表达式 - 将下划线小写替换为大写

    我想知道是否有一个正则表达式模式可以用来将下划线和小写字母的模式转换为大写字母 我正在尝试从 SQL 语句生成 java bean 的字段名 目前数据库列是 load id policy id policy number 但我希望java字
  • pip 和 virtualenv 将 django 的部分安装在错误的位置

    我已经使用 virtualenv 几个星期了 直到今天才出现任何问题 使用 pip 使用 r requests txt 安装我的环境 它将 Django v1 5 的一部分安装在错误的位置 而不是将整个源代码放入 env lib pytho
  • 为什么 Spark(在 Google Dataproc 上)不使用所有 vcore?

    我正在 Google DataProc 集群上运行 Spark 作业 但看起来 Spark 并没有使用所有vcores在集群中可用 如下所示 基于其他一些问题 例如this and this 我已经设置了要使用的集群DominantReso
  • Doctrine 中的简单 IF 测试语句

    Doctrine 支持 IF 语句吗 我收到以下错误 Expected known function got IF 使用 IF 执行此查询时 qb gt select c id IF c type id LIKE 9 c name c la
  • Azure 函数中针对 Cosmos DB 的 SQL 注入

    我已经实现了由 HttpRequest 触发的 Azure 函数 一个参数称为name作为 HttpRequest 的一部分传递 在Integration部分 我使用以下查询从 CosmosDB 检索数据 作为输入 SELECT FROM
  • 从 PHP 的视图计数器中排除机器人和蜘蛛

    我用 PHP 为一个网站构建了一个非常基本的广告管理器 我说基本是因为它并不像 Google 或 Facebook 广告甚至大多数高端广告服务器那样复杂 不处理付款或任何事情 甚至不针对用户 它的目的是为了我的低流量网站 只是简单地显示随机
  • 针对 documentId 的 Firestore 集合组查询

    在我的场景中 用户可以 喜欢 另一个用户的个人资料 因此 我为每个用户都有一个名为 likedBy 的子集合 我在其中为特定用户创建一个文档 例如 用户 col gt 用户A doc gt likeBy col gt 用户B doc 用户C
  • 当从互联网获取表的数据时,有人可以用 UItableview 来解释 MVC 吗?

    任何人都可以向我解释 MVC 在 UITableView 方面如何工作 特别是从互联网获取数据时 我很想知道 UItableview 的模型 视图和控制器是什么 我编写了以下 ViewController 代码 该代码从互联网获取数据并使用
  • 如何在 JavaScript 中解码字符串?

    这对我不起作用 var foo Collection 3A 9 Bad Interviews With Former GOP Presidential Candidates console log decodeURI foo 它输出 Col
  • 如何将Javascript变量值写入CSS?

    我怎样才能拥有time变量的内容显示为content我的 CSS 中的属性 JavaScript function clock var d new Date var hour d getHours var min d getMinutes
  • Xcode 5 IOS 模拟器黑屏且应用程序安装失败

    我刚刚更新了我的 xcode 以与 ios7 一起使用 现在 每当我制作一个新应用程序时 即使它设置为针对 ios7 构建 运行时我也会在模拟器中收到错误 它说安装失败 即使我刚刚创建了该项目并且还没有向其中编码任何内容 模拟器还显示黑屏
  • Hive 表中 count(*) 的错误结果

    我在 HIVE 中创建了一个表 CREATE TABLE IF NOT EXISTS daily firstseen analysis firstSeen STRING category STRING circle STRING specI
  • SwiftUI 聊天应用程序:颠倒列表和上下文菜单的困境

    我正在 SwiftUI 中构建一个聊天应用程序 要在聊天中显示消息 我需要一个反向列表 在底部显示最新条目并自动滚动到底部的列表 我通过翻转列表及其每个条目制作了一个反向列表 标准的做法 现在我想将上下文菜单添加到消息中 但长按后 菜单显示
  • 你能帮助我了解在 C++ 中使用 rsa.h 进行 openssl 公钥加密吗?

    我正在尝试使用 C 中 rsa 的 openssl 实现来了解公钥加密 你能帮我吗 到目前为止 这是我的想法 如有必要 请纠正 Alice 通过网络连接到 Bob 爱丽丝和鲍勃想要安全通信 Alice 生成公钥 私钥对并将公钥发送给 Bob
  • 向下滚动时隐藏固定标题,向上滚动和悬停时显示

    我有一个固定标题 它在向下滚动时隐藏并在向上滚动时再次显示 这一切都按预期工作 但我也希望当你将鼠标悬停在它的位置时它会出现 有什么想法吗 到目前为止我得到了什么 function var lastScrollTop 0 delta 5 w
  • Objective-C 中的 Mixins 还是多重继承?

    假设我有MyUITextViewSubclass它继承自UITextView and MyUITextFieldSubclass它继承自UITextField这两个子类都包含许多相同的方法和属性 以便为这些 UI 控件添加类似的行为 Sin
  • Django - 跳过数组的第一行

    我有一个相当简单的问题 但我似乎找不到简单的解决方案 我想迭代 Django 模板中的数组 但跳过第一个值 假设我有一个这样的数组 我通过视图传递给我的模板 array 1 2 3 4 5 在我的模板中我这样做 表示数组中的 A 结束 如何
  • iPhone原生数据库,iPhone上的所有数据

    是否有可能在 iPhone 上本地化一个 50MB 的大数据库 以便能够以智能的方式非常快速地搜索到它 使用 SQlite 吗 是的 您可以在 iPhone 上使用 SQLite 由于数据库只是一个文件 因此您可以将 50 MB 的文件添加
  • 如何向 Laravel 查询添加整理

    我需要运行一个查询collate utf8 bin像这样 SELECT FROM table WHERE field value collate utf8 bin 这严格适用于管理脚本 我不想更新表字符集本身 只是为了特定查询 我可以使用
  • 一段时间延迟后从触发器执行存储过程

    我想从触发器调用存储过程 如何在x分钟后执行该存储过程 我正在寻找除此之外的其他东西WAITFOR DELAY thanks 有一个定期运行并从表中提取存储过程参数的 SQL 代理作业 这些行还应指示存储过程的运行时间 因此 SQL 代理作