用于事件驱动通信的 SQL CLR

2024-04-24

我工作的地方他们正在使用长轮询检测数据库中发生的事件的技术。虽然它有效......我认为每个人都会同意轮询数据库并不是最佳选择。

我宁愿尝试某种推送技术或技巧。因此,我正在考虑使用表触发器打电话给SQL CLR将事件放入队列或调用 Web 服务的对象。

有很多关于如何执行此操作的示例:

  • 从 SQL CLR 调用 Web 服务? https://stackoverflow.com/questions/32875954/call-web-service-from-sql-clr
  • 如何从 SQL Server 存储过程调用 Web 服务 https://stackoverflow.com/questions/18486928/how-to-invoke-webservice-from-sql-server-stored-procedure/30248335#30248335
  • 在 CLR 集成中使用 Web 服务和 Xml 序列化 http://blogs.msdn.com/b/sqlclr/archive/2005/07/25/vineet.aspx

不过,我对这样做的智慧和表现有点担心。

所以我的问题是:

  • 长时间运行的触发器进程是否会阻止原始 INSERT 完成?
  • 失败的触发进程是否会阻止原始 INSERT 完成?
  • TRIGGERS 是否在自己的线程上运行?
  • 这是愚蠢的尝试还是有更好的选择?

我正在考虑使用表触发器打电话给SQL CLR将事件放入队列或调用 Web 服务的对象。

虽然需要 SQLCLR 来进行 Web 服务调用,但您可能不需要 SQLCLR 来简单地将事件放入队列中。

长时间运行的触发器进程是否会阻止原始 INSERT 完成?

这不是“可以”的问题:它们绝对会,因为触发器是 DML 语句(或 DDL 触发器中的 DDL 语句,或 LOGON 触发器中的登录)事务的一部分。只要触发器正在执行,触发它的 DML 语句就会等待 COMMIT(这都是自动处理的)。

失败的触发进程是否会阻止原始 INSERT 完成?

这不是“可以”的问题:它们绝对会,因为触发器是事务(即 DML 语句)的一部分。事实上,如果你想基于某种逻辑取消一个DML操作,只需调用ROLLBACK;.

TRIGGERS 是否在自己的线程上运行?

如果您询问它们是否与触发它们的 DML 语句异步运行,答案是不。根据上面的前两个答案,它们是同一交易的一部分。在 DML 语句完成初始工作(包括 CHECK/UNIQUE/等约束的验证)之前,触发器没有任何事情可做,并且在触发器完成之前 DML 语句无法完成。

这是愚蠢的尝试还是有更好的选择?

虽然直接进行 Web 服务调用比其他情况更适合某些情况,但这并不愚蠢。人们确实做到了这一点,并且取得了成功,但我相信也有不少人在条件不利的情况下试图做到这一点,结果却把事情弄得一团糟。我想说,如果 a) Web 服务位于本地 Intranet 上(即没有延迟,或几乎没有延迟),并且 b) Web 服务调用快速完成(或至少足够快地超时),那么您应该没问题去做这个。

然而,鉴于这将在触发器中,因此应该更加谨慎地处理。这让我想到了一些“更好的选择”,我在两天前在 DBA.StackExchange 上的一个几乎重复的问题中建议了这些:

我可以在与数据库实例不同的服务器上运行 CLR 存储过程吗? https://dba.stackexchange.com/questions/128283/can-i-run-a-clr-stored-procedure-on-a-different-server-than-the-database-instanc/128289#128289

并且,以下链接是 6 天前出现的另一个非常相似的问题(此处位于 S.O.),涉及 Web 服务调用。我对此问题的回答包含有关减少一般网络调用之间的争用的信息。这是您应该注意的事情,即使您采用队列方法并有一个由 SQL Server 代理作业启动的 T-SQL 存储过程,调用 SQLCLR 对象来执行 Web 服务调用。

SQL Server CLR 线程 https://stackoverflow.com/questions/35116558/sql-server-clr-threading/35116821#35116821

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

用于事件驱动通信的 SQL CLR 的相关文章

  • 静态构造函数和 BeforeFieldInit?

    如果类型没有静态构造函数 则将执行字段初始值设定项 就在使用该类型之前 或者在某个时间点突发奇想 运行时 为什么这段代码 void Main start Dump Test EchoAndReturn Hello end Dump clas
  • 关于逻辑/算法的想法以及如何防止线程写入 Sql Server 中的竞争

    我有以下逻辑 public void InQueueTable DataTable Table int incomingRows Table Rows Count if incomingRows gt RowsThreshold async
  • 2个对象,完全相同(除了命名空间)c#

    我正在使用第三方的一组网络服务 但遇到了一个小障碍 在我手动创建将每个属性从源复制到目标的方法之前 我想我应该在这里寻求更好的解决方案 我有 2 个对象 一个是 Customer CustomerParty 类型 另一个是 Appointm
  • MVC 5 中具有 ASP.NET Identity 的 Autofac 不会验证 OWIN 管道中的安全标记

    我在 MVC 5 中设置了 AutoFac 来与 ASP NET Identity 一起使用 表面上一切似乎都工作正常 即用户可以创建帐户并登录 但后来我发现 当安全标记更改时 用户不会注销 通过在 AspNetUsers 表中进行暴力破解
  • if constexpr 中的 not-constexpr 变量 – clang 与 GCC

    struct A constexpr operator bool const return true int main auto f auto v if constexpr v A a f a clang 6 接受该代码 GCC 8 拒绝它
  • Unity手游触摸动作不扎实

    我的代码中有一种 错误 我只是找不到它发生的原因以及如何修复它 我是统一的初学者 甚至是统一的手机游戏的初学者 我使用触摸让玩家从一侧移动到另一侧 但问题是我希望玩家在手指从一侧滑动到另一侧时能够平滑移动 但我的代码还会将玩家移动到您点击的
  • 在 SQL Server 中获取一周的第一天

    我试图按周对记录进行分组 将聚合日期存储为一周的第一天 然而 我用于四舍五入日期的标准技术似乎无法在几周内正常工作 尽管它可以在天 月 年 季度和我应用的任何其他时间范围内正常工作 这是 SQL select start of week d
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • 对于 C# Express 用户来说,有哪些好的工具可以识别可能重复的代码? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 也可以看看 有什么工具可以检查重复的 VB NET 代码吗 https stackoverflow c
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • 在 C# 的 WebAPI 中的 ApiController 上使用“传输编码:分块”提供数据

    我需要服务分块传输使用编码数据API控制器 因为我无权访问HttpContext or the Http请求 我有点不知道在哪里写入响应以及在哪里刷新它 设置如下 public class MyController ApiControlle
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • 如何获取带有某个属性注释的所有属性?

    我刚刚从 Roslyn 开始 我想找到所有用属性名称 OneToOne 注释的属性 我启动了 SyntaxVisualizer 并能够获取对该节点的引用 但我想知道是否有更简单的方法来实现此目的 这就是我所拥有的 var prop docu
  • 如何在 ASP.NET Core 中注入泛型的依赖关系

    我有以下存储库类 public class TestRepository Repository
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • 在 Web 应用程序中何处以及如何使用拦截器?

    我最近对拦截器概念很感兴趣 我知道这个概念在 NHibernate Entity Framework 等许多库中都有使用 但我对如何在 ASP NET MVC Web 应用程序中使用这个概念感兴趣 在 Mvc Web 应用程序中什么地方有用
  • PHP 无法加载 php_curl.dll 扩展

    我昨天的帖子的后续 使用 PHP 启用 cURL https stackoverflow com questions 16403376 enabling curl with php 问题是 PHP 无法加载 php curl dll 我尝试
  • 使用 Amazon Web Services S3 与 Google Application Engine 进行存储的相对优势

    与 Google Application Engine 相比 您认为 Amazon Web Services S3 的优点和缺点是什么 在我询问时 两者的每 GB 成本大致相似 我没有看到任何关于服务质量的普遍投诉 所以我认为使用哪一个的决
  • 通过动态对象进行 Office 互操作的枚举值

    我在 Silverlight Ouf Of Browser 应用程序中使用 COM 互操作来实现 Word 自动化 这意味着我不能直接引用 COM 而是依赖于动态 现在我想调用以下方法 Range Collapse WdCollapseDi
  • 以编程方式将 Android 内容流式传输到电视

    我想要实现的是直播我的 Android 之一 游戏到电视 使用DLNA Wi Fi 直连联系 我能以某种方式做到这一点吗 我仍然想使用手机控制我的游戏 事实上 但我会在电视上实时看到我的游戏屏幕 有什么解决办法吗 Thanks 对于 And
  • 循环遍历日期范围内的所有月份?

    如果我有一个开始日期 比如说2009 02 01 和结束日期 比如2010 01 01 如何创建一个循环来遍历该范围内的所有日期 月份 Try start month strtotime 2009 02 01 end strtotime 2
  • Flux waitFor() 和异步操作,如何建模。

    我使用 pouchDB 作为应用程序的本地数据库 我想查询 PouchDB 的结果并将其加载到 React js 中 然而 即使我使用 waitFor 方法 PouchDB 查询的结果返回得太晚了 我想我不明白 waitFor 的用法是否正
  • 如何将 kotlin 协程与响应式 Spring 数据结合使用

    我正在尝试将一些项目从 Spring Reactor 迁移到 kotlin 协程 我有一些基于 spring webflux 的控制器 如下所示 RestController class Controller val productRepo
  • IIS 7.5 上的 ASP.NET MVC - 错误 403.14 禁止

    我正在使用 Visual Studio 2010 RC 运行 Windows 7 Ultimate 64 位 我最近决定让 VS 在 IIS 上运行 调试我的应用程序 而不是在它附带的开发服务器上 但是 每次我尝试运行 MVC 应用程序时
  • 如何在我的 Phonegap 应用程序中升级 Phonegap?

    我有一个 Phonegap 应用程序 是从早期版本的 Phonegap 启动的 我想将其升级到最新版本 我需要采取哪些步骤来升级它 我正在寻找一般答案 但我的具体情况是 Phonegap 1 1 0 gt 1 2 0 我今晚发现了这个 看起
  • 使用反应虚拟化和新的 CellMeasurer 实现动态行高

    我正在使用带有 Autosizer List 和 CellMeasurer 组件的 React Virtualized 9 当列表数据更改时 我需要更新行高 看来 自从版本 9 中支持 React Fiber 的更改以来 CellMeasu
  • “by viewModels()”Kotlin 属性委托未解析的引用

    我正在尝试用 kotlin 实现 viewmodel 首先我添加了所需的依赖项 implementation androidx appcompat appcompat 1 1 0 implementation androidx core c
  • 更改区域设置:强制活动重新加载资源?

    所以我的应用程序中有一个语言设置 切换语言时 我希望所有文本视图等立即更改语言 目前我只是更改配置中的区域设置 因此当用户重新启动活动时语言已更改 我的问题的一个丑陋的解决方案是让每个文本视图在每次更改语言时加载新资源 有更好的解决方案吗
  • git stash apply 和 git stash apply --index 有什么区别?

    每当我跑步时git stash apply and git stash apply index完成后git stash a即使我的 WIP 目录有暂存的更改 未暂存的 但跟踪的更改 和未跟踪的文件 我也会得到相同的结果 这是正常的吗 不应该
  • 将 XML 转换为带属性的 ruby​​ 哈希

    客观的 将 XML 转换为 ruby Hash 包含所有节点和属性值 我尝试了什么 xml
  • ASP.Net Core 回发后如何保持选项卡处于活动状态

    我有一个视图 其中包含一组选项卡 每个选项卡呈现不同的部分视图 阅读这些引导选项卡的文档和 W3Schools 示例后 我无法找到一种方法使活动选项卡在回发时保持活动状态 我见过的所有示例都使用旧版本的 Net 并且也不适用 这是我的代码
  • 类型错误:$.browser 未定义

    我正在使用 msdropdown 图像组合框来创建下拉选择选项 当我在我的电脑上本地运行此代码时 一切都运行良好 但是当我在 GoDaddy 服务器上运行它时 msdropdown 被禁用 它不适用于任何浏览器 Firebug 将错误显示为
  • Rust 双与号,&&

    我看到一些代码如下所示 fn test lt a gt a mut a str 我知道 a 是一生 而 是引用 但是我很难理解双重引用 根据我的理解 引用是一个指针 那么 是指向另一个指针还是其他指针的指针 根据我的理解 引用是一个指针 是
  • Gitlab:无法识别对等方的证书颁发者

    我在全新安装 gitlab 时遇到此错误 该消息如下所示 fatal unable to access https gitlab ci token email protected cdn cgi l email protection som
  • 用于事件驱动通信的 SQL CLR

    我工作的地方他们正在使用长轮询检测数据库中发生的事件的技术 虽然它有效 我认为每个人都会同意轮询数据库并不是最佳选择 我宁愿尝试某种推送技术或技巧 因此 我正在考虑使用表触发器打电话给SQL CLR将事件放入队列或调用 Web 服务的对象