在将数据插入SQL Server表后立即获得警报的最佳方法

本文关键字:方法 最佳 插入 数据 SQL Server | 更新日期: 2023-09-27 18:05:51

我有一个任务,在这个任务中我可以控制数据库,但不能控制在SQL Server 2008 R2数据库上执行CRUD操作的应用程序。

理想情况下,我想在对数据表进行插入操作后不久调用(POST)一个web API(请注意,我不必等待API响应)。

实现这个目标的想法

  1. 在数据表上创建一个SQL Server触发器(CLR启用,但它是SQL Server 2008R2,所以它使用。net 2.0)。

    我可能需要创建一个存储过程来调用web API (POST)(它应该是即发即忘,因为我不需要等待API响应)作为触发器的一部分。

  2. 服务代理和依赖注入警报——比;这工作得很好,但我担心并发性。

  3. 传统轮询

问题:如果我使用第一个解决方案,触发器是否在与插入操作相同的事务范围内执行?如果web API关闭,是否会延迟插入操作?这个方法处理并发吗?

你能推荐其他的方法吗?(请将利弊作为解决方案的一部分)

在将数据插入SQL Server表后立即获得警报的最佳方法

触发器的问题在于它们在触发它们的语句的上下文中执行,因此触发器的延迟将减慢/阻塞实际应用程序。因此,您应该永远不要在触发器中执行冗长的处理或调用外部服务。

我的方法是:

  1. 有一个非常精简的触发器,只使INSERT进入一个单独的表(一个"命令"表或任何你可能称之为它)。该表应包含通知

  2. 所需的所有相关信息。
  3. 有一个单独的,预定的进程-要么是一个预定的SQL Server作业,要么是服务器上的外部应用程序-定期轮询表-每分钟,每15分钟-无论你需要什么-如果在"命令"表中有一个新的条目,它做它需要做的事情并发送通知或调用外部WebAPI服务等

使用这种方法,您的系统仍然可以尽可能地响应(不受"卡住"触发器的延迟),并且它使您能够灵活地根据需要频繁地调度"通知发送者"应用程序或SQL作业。