【发布时间】:2019-04-19 14:40:16
【问题描述】:
我有两张桌子employee 和department。
员工
Id, Name, JoiningDate, SpecialRegistrationDone, DepartmentId
部门
DepartmentId, Name
DepartmentId = 2和Name = "AI"有专门的部门。
有一个 Java 服务将数据推送到 Employee 和 Department 表。
现在,我要写一个满足条件的轮询服务(轮询频率15分钟一次)
select e.*
from Employee e
inner join Department d on e.DepartmentId = d.DepartmentId
and e.DepartmentId = 2
and e.JoiningDate > cast(GetDate() as date)
and e.specialRegistrationDone = 0
如果提取了任何记录,则调用 Web 服务,例如 http://specialdepartmentregistration/register 并在那里传递员工详细信息。
一种编写方法是编写一个 Java 服务,该服务轮询数据库并执行此查询,获取结果并调用 Web 服务以获取结果集。
我正在考虑在 SQL Server 端创建一个服务,该服务仅执行查询并调用 Web 服务。我该怎么写?在 SQL Server 2014 中甚至可能吗?
【问题讨论】:
-
只是一个想法,但是实现一个调用服务器端脚本的 cron 作业会不会容易得多,该脚本负责查询数据库,并在需要时调用 Web 服务?跨度>
-
您无法在内部 T-SQL 中编写任何东西来将数据推送到Web 服务。它必须是外部的东西。虽然您可以使用系统 com 存储过程,但这是不可靠且不受支持的
-
换一种说法,数据库不应该调用长时间运行的、阻塞的外部服务,如网络服务。另一方面,预定的工作可以很容易地做到这一点
-
database 将如何限制对该服务的请求以避免泛滥?它将如何处理错误响应?它将如何重试失败的请求?所有这些对于小型控制台应用程序或脚本来说都是微不足道的。在 SQL 中这样做是不可能的
-
顺便说一句,我使用 SSIS、定制的命令行工具和计划作业每 15 分钟轮询一百万行表,并调用航空公司 Web 服务以获取新数据,将其存储到数据库中并结合所有这些东西在一起。调用 Web 服务 HttpClient,使用 Polly 实现重试,使用 TPL 数据流创建具有节流功能的处理管道很容易。即使在 T-SQL 中进行单个 HTTP 调用,即使使用 SQLCLR 也太棘手了,更不用说重试、并发请求和限制
标签: sql sql-server