在数据插入 SQL 服务器 table 后立即获得警报的最佳方式

Best way to get an alert soon after data inserted into a SQL Server table

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

理想情况下,我想调用 (POST) 网络 API(请注意,我不必等待 API 响应)对数据 table.

的插入操作

我想实现的事情

  1. 在数据 table 上创建一个 SQL 服务器触发器(已启用 CLR,但它是 SQL Server 2008R2,因此它使用的是 .Net 2.0)。

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

  2. Service Broker 和依赖项注入警报 ---> 这很好用,但我担心并发性。

  3. 传统轮询

问题:如果我采用第一种解决方案,触发器是否在与插入操作相同的事务范围内执行?如果webAPI挂了,会不会延迟insert操作?此方法是否处理并发?

您还有其他推荐的方法吗? (请将优缺点作为解决方案的一部分)

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

我的方法是:

  1. 有一个非常精简的触发器,只会将 INSERT 变成一个单独的 table("command" table 或任何您可能称之为它)。此 table 应包含通知的所有必要相关信息

  2. 有一个单独的预定进程 - 预定的 SQL 服务器作业或服务器上的外部应用程序 - 定期轮询 table - 每分钟,每 15 分钟 - 无论您需要什么 - 如果 "command" table 中有新条目,它会执行它需要做的事情并发送通知或调用外部 WebAPI 服务等

使用这种方法,您的系统仍然尽可能地响应(不会因 "stuck" 触发器而延迟),并且它使您可以灵活地安排 "notification sender" 应用程序或 SQL 工作频率随你需要。