用于事件驱动通信的 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 的相关文章

  • 如何让 Swagger 插件在自托管服务堆栈中工作

    我已经用 github 上提供的示例重新提出了这个问题 并为任何想要自己运行代码的人提供了一个下拉框下载链接 Swagger 无法在自托管 ServiceStack 服务上工作 https stackoverflow com questio
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • 如何区分用户点击链接和页面自动重定向?

    拥有 C WebBrowser control http msdn microsoft com en us library system windows forms webbrowser aspx在我的 WinForms 应用程序中 并意识
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • 如何通过SQL查询检查是否有JSON函数?

    有SQL 2016 中的 JSON 函数 https learn microsoft com en us sql t sql functions json functions transact sql例如 JSON VALUE JSON Q
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • 我是否需要在外键上指定 ON DELETE NO ACTION?

    我有以下与 SQL Server 2012 一起使用的 DDL CREATE TABLE Subject SubjectId INT IDENTITY 1 1 NOT NULL Name NVARCHAR 50 Not NULL CONST
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐

  • 在 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 服务的对象